пакет окон |для цикла и команды dir с параметром - PullRequest
0 голосов
/ 17 мая 2018

Рабочая команда - вставляется непосредственно в командную оболочку:

for /f %a in ('dir /b /s ..\*') do @echo %~na | findstr transport_bb_*_*_* | sort

Проблема 1) При выполнении той же команды из файла .bat возникает ошибка:

| was unexpected at this time.

Проблема 2)Кроме того, хотелось бы, чтобы упомянутый файл .bat принимал параметр (каталог):

for /f %a in ('dir /b /s %1\..\*') do @echo %~na | findstr transport_bb_*_*_* | sort

Пробные апострофы, "серьезные акценты", двойной процент, использование SET для помещения всей команды в круглые скобки, по-прежнему безрезультатно..

Помощь оценена.

Спасибо, Барт

1 Ответ

0 голосов
/ 18 мая 2018

объявление 1) В пакетном файле вы должны удвоить % -> %%. Трубы | вам придется заменить рабочим процессом:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /F "delims=" %%A in ('dir /B /S ..\*') do (
    echo %~nA
    set "search_in_file=%%A"
    findstr transport_bb_*_*_* !search_in_file! | sort
)

объявление 2) Взять пользовательский ввод

@echo off
SETLOCAL  ENABLEDELAYEDEXPANSION
SET "input=%~1"
SET "search_in_dir=!input!\*"

   for /F "delims=" %%A in ('dir /B /S !search_in_dir!') do (
        REM echo %%~nA
        set "search_in_file=%%A"
        REM ECHO findstr "transport_bb_*_*_*" "%search_in_file%"
        findstr "transport_bb_*_*_*" "!search_in_file!"
        IF ERRORLEVEL 1 (
           ECHO "String NOT found in file !search_in_file!"
        ) ELSE (
           ECHO ""String found in file !search_in_file!"
        )
    )

или больше как ваш скрипт:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "input=%~1"
SET "search_in_dir=!input!\*"

   for /F "delims=" %%A in ('dir /B /S !search_in_dir!') do (
        set "search_in_file=%%A"
        findstr /M "transport_bb_*_*_*" "!search_in_file!" | sort
    )

Примечания:

Где параметр findstr:

/M         Prints only the filename if a file contains a match.

%~1 ... принимает первый пользовательский параметр и расширяет его
!....! теперь разделяет переменную из-за того, что SETLOCAL ENABLEDELAYEDEXPANSION включено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...