2016-05-09 2 views
1

Я пытаюсь создать пакетный файл, который вернет местоположение файла, включая раздел (или диск), чтобы я мог использовать его для большего количества манипуляций в этом пакетном файле. Имя файла известно, но раздел и каталог неизвестны. Это возможно?поиск файлов по разделам в пакетных файлах

+1

Редактировать свой вопрос и опубликовать код, который вы пробовали до сих пор! – Hackoo

+3

Поиск определенного файла на одном диске, например. г. 'C:', вы можете использовать 'where/R C: \" filename.ext "'; для этого на нескольких дисках вы можете использовать цикл 'for', например' for %% D in (C: D: E: F :) do @where/R %% D \ "filename.ext" '... – aschipfl

ответ

0

Вы можете попробовать что-то вроде этого:

@echo off 
Title Searching for file by name 
Mode con cols=75 lines=3 
cls & color 0A 
Set SearchResult=SearchResult.txt 
If Exist %SearchResult% Del %SearchResult% 
echo(
set /P "FileName=Type the file name for looking for = " 
Setlocal EnableDelayedExpansion 
for /f "tokens=2" %%i in ('wmic logicaldisk where "drivetype=3" ^|find /i ":"') do (
    Set MyDrive=%%i 
    echo(& cls 
    echo( & echo  Please Wait for moment .... Searching for "%FileName%" on "!MyDrive!\" 
    @where /r !MyDrive!\ "%FileName%" >> %SearchResult% 
) 
Start %SearchResult% 
0

Следующий сценарий - назовем его findfile.bat - ищет файл с именем, заданным в качестве аргумента командной строки (например, findfile.bat "lostfile.txt") на локальные диски и сетевые диски в качестве примера:

@echo off 
for /F "skip=1" %%I in (
    'wmic LOGICALDISK WHERE ^(^ 
     DriveType^=3 OR^ 
     DriveType^=4^ 
    ^) GET DeviceID' 
) do (
    for /F "delims=" %%J in ("%%I") do (
     2> nul where /R %%J\ "%~1" 
    ) 
) 

wmic команда используются для извлечения дисков, доступных в текущей системе. В примере допустимы два допустимых значения DriveType: 3, что означает локальные диски, и 4, что означает сетевые диски. Вы можете адаптировать фильтр по своему усмотрению - ссылочный сайт Win32_LogicalDisk class для всех возможных значений. Чтобы не фильтровать типы дисков, просто удалите весь пункт WHERE и вместо этого используйте оставшуюся wmic командную строку wmic LOGICALDISK GET DeviceID.