Во-первых, не меняйте переменную PATH. Кроме того, избегайте изменения дополнительных переменных среды Windows, их изменение может вызвать проблемы.
Переменная среды %PATH%
содержит список папок. Когда команда вводится в приглашении CMD, операционная система сначала ищет исполняемый файл в текущей папке, если не найден, она сканирует %PATH%
чтобы найти его.
FOR /R
Проход по файлам (подпапки Recurse): в отличие от некоторых других вариантов команды FOR
вы должны включать подстановочный знак (либо *
либо ?
) в 'set', чтобы получить согласованные возвращаемые результаты (с параметром FOR /R [[drive:]path] %%parameter IN (set) DO command
синтаксический шаблон команды DO ).
Ваш скрипт может выглядеть следующим образом, если нужно запустить 895551.bat "Text Doc.txt"
(с кавычками в имени файла):
@echo off
set "search=%~1"
set "myPathToFile="
if not "%~1"=="" (
echo(
echo Searching for: "%search%"
echo(
for /r "%cd%" %%f in ("%search%"*) do (
if exist %%f (
set "myPathToFile=%%~f"
echo "%%~f"
echo(
)
)
echo Search finished!
) else (
echo Nothing to search!
)
echo last found myPathToFile "%myPathToFile%"
Если должен быть запущен без имени файла, окружающего кавычки: 895551.bat Text Doc.txt
тогда ваш скрипт может запуститься следующим образом:
@echo off
set "search=%*"
set "myPathToFile="
if not "%1"=="" (
Обязательное чтение:
Выход:
==>895551.bat
Nothing to search!
last found myPathToFile ""
==>895551.bat "Text Doc.txt"
Searching for: "Text Doc.txt"
Search finished!
last found myPathToFile ""
==>type nul>files\"Text Doc.txt"
==>895551.bat "Text Doc.txt"
Searching for: "Text Doc.txt"
"d:\bat\files\Text Doc.txt"
Search finished!
last found myPathToFile "d:\bat\files\Text Doc.txt"
==>type nul>"files\folder 1\Text Doc.txt"
==>895551.bat "Text Doc.txt"
Searching for: "Text Doc.txt"
"d:\bat\files\Text Doc.txt"
"d:\bat\files\folder 1\Text Doc.txt"
Search finished!
last found myPathToFile "d:\bat\files\folder 1\Text Doc.txt"
==>