2016-10-15 2 views
2

Я попытался написать пакетный скрипт, который найдет все пути файлов с тем же именем, что и входная строка. прямо сейчас он может найти только первый найденный файл, и я не могу подумать о том, как его перечислить в несколько файлов. Я не очень опытен, и мне нужна помощь.Поиск путей нескольких файлов с тем же именем файла

это часть кода сценария:

:start 
    cls 
    echo Enter file name with extension: 
    set /p filename= 
    echo Searching... 

for %%a in (C D E F G H U W) do (
    for /f "tokens=*" %%b in ('dir /s /b "%%a:\%filename%"') do (
     set file=%%~nxb 
     set folderpath=%%~dpb\ 
     ::the path of the file without the filename included "C:\folder\folder\" 
     set fullpath=%%b 
     ::the path of the file with the filename included "C:\folder\folder\file" 
     goto break 
) 
) 
:notfound 
    cls 
    echo Enter file name with extension: 
    echo %filename% 
    echo File Not Found! 
    ping localhost -n 4 >nul 
    goto start 

:break 
    if "%folderpath:~-1%"=="\" set folderpath=%folderpath:~,-1% 
    cls 
    echo ? %filename% found 
    echo %fullpath1% 
    echo %fullpath2% 
    echo %fullpath3% 
    --- || --- 

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

пример:

input: 
readme.txt 

output: 
3 files found 
C:\folder\folder\readme.txt 
C:\folder\folder\folder\readme.txt 
D:\folder\readme.txt 

variables: 
path1 = C:\folder\folder\readme.txt 
path2 = C:\folder\folder\folder\readme.txt 
path3 = D:\folder\readme.txt 

ответ

0

Вот один скрипт, который будет выполняет задачу запрашивали. Он ищет все диски для вашего входного имени файла с расширением, помещает каждый найденный полный путь файла в переменную, а затем выводит эти переменные для вас. Я не буду адаптировать сценарий для каких-либо новых изменений после этого ответа, сообщая о том, как интегрировать его в остальную часть вашего скрипта или поддерживать любые изменения, которые вы впоследствии можете сделать.

@Echo Off 
Set/P "SearchTerm=Enter file name with extension: " 
Set "i=0" 
For /F "Skip=1" %%A In ('WMIC LogicalDisk Where^ 
    "DriveType>1 And DriveType!=5 And FreeSpace Is Not Null" Get DeviceID' 
    ) Do For %%B In (%%A) Do (For /F "Delims=" %%C In (
     'Where/F /R %%B\ "%SearchTerm%"2^>Nul') Do (Set/A i+=1 
      Call Set FullPath[%%i%%]=%%C)) 
If %i% LSS 1 (Echo= %SearchTerm% Not Found) Else (
    Echo= %SearchTerm% had %i% match(es^) 
    For /L %%A In (1,1,%i%) Do (
     Call Echo= %%%%FullPath[%%A]%%%% = %%FullPath[%%A]%%)) 
Timeout -1 1>Nul 

Пожалуйста, будьте осторожны, что поиск многих местоположений и перенос многих файлов в переменные могут зависеть от вашей системы и вызвать проблемы.

+0

Благодарим вас за комментарий. Я взял ваш совет и вместо того, чтобы одновременно искать несколько файлов, искать пакетный файл по одному и запускать его на всех функциях, после чего он ищет другой файл и перебирается снова, пока не останется файлов. –