Plik wsadowy, reż | findstr w pętli for

0

Pozwólcie, że przedmówię, przyznając, że jestem kompletnym noobem w plikach wsadowych ... i ogólnie języku programowania. Próbuję napisać plik wsadowy, który pozwala użytkownikowi wprowadzić częściowy nazwa_pliku, i przeszuka dziesiątki podkatalogów, znajdzie i otworzy wszystkie pliki pdf, których nazwa zawiera dane wprowadzone przez użytkownika. Spodziewam się, że znajdzie od 2 do 8 różnych plików pdf.

Mogę użyć poniższych, aby zwrócić ścieżki do plików,

set /p Number="Enter the Job-Shaft Number "

echo Searching folders

dir /b /s "*.pdf" | findstr /i "%Number%"

ale gdy próbuję zawinąć go w pętlę for, tak że mogę coś z tym zrobić, napotykam problemy:

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

Rura nie lubi. Jakieś sugestie?

P.S. Chcę, żeby faktycznie otworzył pliki pdf nie tylko echo, ale jeszcze nie zaszedłem tak daleko. Jeśli teraz nie mogę go uruchomić, nie ma sensu jeszcze bardziej komplikować rzeczy.

Gumbi
źródło
Jakie masz błędy?
harrymc
Trudno powiedzieć, harrymc, miga tak szybko, a potem okno się zamyka. ale myślę, że mówi „| w tym czasie było nieoczekiwane”
Gumbi

Odpowiedzi:

1

Aby uruchomić polecenie, którego potrzebujesz

  1. wstawić /f tuż za, a także
  2. wstawić "delims=" do nie tokenizować wyjście
    (z domyślnym "tokens=1 and delims= " odetnie się po białej przestrzeni)
  3. uciec od symbolu rury ^| przekazać go do dodatkowego cmd.exe, który jest wykonywany za kulisami.

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

Jeśli %Number% rzeczywiście reprezentuje liczbę, nie ma potrzeby używania /i przełącznik

LotPings
źródło
1
Dzięki za pomoc! for /f "delims=" %%G in ('dir /b /s "*.pdf" ^| findstr /i "%Number%"') do echo %%G to co działało!
Gumbi