#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. спасибо за ваш комментарий. Я воспользовался вашим советом и вместо одновременного поиска в нескольких файлах пакетный файл выполняет поиск по одному за раз и запускает его во всех функциях, затем после поиска другого файла и повторяется снова и снова, пока не останется файлов.