Вы должны получить эту ошибку: | was unexpected at this time.
. Ваша непосредственная проблема заключается в том, что специальные символы без кавычек, такие как |
, должны быть экранированы с помощью ^
, когда они появляются в FOR / F ('command').
for /f "usebackq" %%i in (`DIR /b /s "C:\" ^| FIND "someexe.exe"`) do SET foobar=%%i
Звучит так, как будто вы запускаете свой командный файл, дважды щелкнув на рабочем столе или в проводнике Windows. Это работает, но затем окно немедленно закрывается после завершения пакета. В вашем случае он заканчивается до достижения PAUSE из-за синтаксической ошибки.
Я всегда запускаю свои командные файлы из командного окна: из меню «Пуск» вы хотите run cmd.exe
. Это откроет командную консоль. Затем CD в каталог, где находится ваш пакетный файл, а затем запустите пакетный файл, введя его имя (расширение не требуется). Теперь окно остается открытым после завершения сценария. Вы можете проверить свои переменные, используя SET, запустить другой скрипт, что угодно.
В вашем случае нет необходимости использовать FIND - DIR может найти файл напрямую. Кроме того, путь к вашему файлу может включать пробелы, в этом случае он будет проанализирован в токены. Вам нужно установить «DELIMS =» или «TOKENS = *», чтобы вы получили полный путь.
Я никогда не понимаю, почему люди используют USEBACKQ при выполнении команды. Я нахожу это полезным, только если я пытаюсь использовать FOR / F с файлом и мне нужно заключить файл в кавычки из-за пробелов и / или специальных символов.
Кроме того, вы можете столкнуться с ошибками из-за недоступных каталогов. Перенаправление stderr на nul очищает вывод. Здесь снова, >
должен быть экранирован.
for /f "delims=" %%F in ('dir /b /s "c:\someexe.exe" 2^>nul') do set foobar=%%F