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

1 ответ1

1

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

  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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .