Пакетный файл, реж | findstr внутри цикла for

525
Gumbi

Позвольте мне предвосхитить, признав, что я полный нуб в пакетных файлах ... и язык программирования в целом. Я пытаюсь написать командный файл, который позволяет пользователю ввести частичное имя файла, и он будет искать десятки подкаталогов, найти и открыть все PDF-файлы, чье имя содержит ввод пользователя. Я ожидаю, что он найдет от 2 до 8 различных файлов PDF.

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

set /p Number="Enter the Job-Shaft Number "  echo Searching folders  dir /b /s "*.pdf" | findstr /i "%Number%" 

но когда я пытаюсь обернуть его в цикл for, чтобы я мог что-то с ним сделать, у меня возникают проблемы:

for %%G in ('dir /b /s "*.pdf" | findstr /i "%Number%"') do echo %%G 

Кажется, это не нравится труба. Какие-либо предложения?

PS Я хочу, чтобы он действительно открывал файлы PDF, а не только эхо, но я еще не дошел до этого. Если я не могу заставить его работать сейчас, нет никакого смысла делать все более сложным.

0
Какие ошибки вы получаете? harrymc 5 лет назад 0
Трудно сказать, Харримк, он так быстро мигает, а затем окно закрывается. но я думаю, что это говорит "| было неожиданно в это время" Gumbi 5 лет назад 0

1 ответ на вопрос

1
LotPings

Для запуска команды вам нужно

  1. вставить /fсразу за, а также
  2. вставить, "delims="чтобы не токенизировать вывод
    (по умолчанию "tokens=1 and delims= "он обрезается после пробела)
  3. экранируйте символ канала, ^|чтобы передать его вторичному cmd.exe, который выполняется за кулисами.

for /f "delims=" %%G in ('dir /b /s "*.pdf" ^| findstr /i "%Number%"') do echo %%G 

Если %Number%действительно представляет число, нет необходимости использовать /iпереключатель

Спасибо за вашу помощь! `for / f" delims = "%% G in ('dir / b / s" * .pdf "^ | findstr / i"% Number% "') do echo %% G` - это то, что сработало! Gumbi 5 лет назад 1

Похожие вопросы