Поиск путей к нескольким файлам с одинаковым именем файла

#batch-file #cmd

#пакетный файл #cmd

Вопрос:

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

это часть кода скрипта:

 :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:folderfolder"
        set fullpath=%%b
        ::the path of the file with the filename included "C:folderfolderfile"
        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:folderfolderreadme.txt  
C:folderfolderfolderreadme.txt  
D:folderreadme.txt

variables:
path1 = C:folderfolderreadme.txt
path2 = C:folderfolderfolderreadme.txt
path3 = D:folderreadme.txt
  

Ответ №1:

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

 @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
  

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

Комментарии:

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