findstr по множественным значениям - PullRequest
0 голосов
/ 02 июля 2018

Пожалуйста, прости меня, если это кажется очевидным, но у меня такое поведение для цикла for, который просматривает определенные именованные каталоги (US_Site4 и т. Д.) И считывает файл конфигурации в каждом из них, чтобы запустить команду отдельно для каждого:

setlocal enabledelayedexpansion


REM The Root to start searching from
SET "InstallSets=D:\InstallSets"

REM Folders to not search with in
SET "ExcludeStr=findstr /I /v ^"\Master Files \Training \Software^""

REM 
SET "InstallSets=D:\InstallSets"

for /f "delims=*" %%F IN ('dir /s /b /on "!InstallSets!" ^| findstr /E /C:"Config.xml" ^| !ExcludeStr!') do (
    (ECHO "%%F"| findstr /I "\US_Site4 \US_Site5" 1>NUL) && (
       ECHO "%%F"...
   )
)

И я хотел бы иметь возможность репликации более настраиваемым пользователем способом для добавления в будущем, то есть настройки переменной в верхней части командного файла, например ::

setlocal enabledelayedexpansion

REM The Root to start searching from
SET "InstallSets=D:\InstallSets"

REM Folders to not search with in
SET "ExcludeStr=findstr /I /v ^"\Master Files \Training \Software^""

REM Folders to search in only
SET "DoOnlyStr=findstr /I ^"\US_Site4 \US_Site5^" 1>NUL"

for /f "delims=*" %%F IN ('dir /s /b /on "!InstallSets!" ^| findstr /E /C:"Config.xml" ^| !ExcludeStr!') do (
    (ECHO "%%F"|  %DoOnlyStr%) && (
       ECHO "%%F"...
   )
)

Первый возвращает 2 результата, которые являются site4 и 5, как и ожидалось, однако второй возвращает 4 (2, который я хотел, но дублировал). Почему это так и как можно получить «удобную для пользователя» настраиваемую версию, например, просто установить переменную? Затем я хочу сделать второй файл с findstr /I /V, чтобы сделать обратное, и сделать все остальное, НО Site4 и 5.

С уважением

Адам

1 Ответ

0 голосов
/ 02 июля 2018

Это был 1>NUL, который отображал только 1 вывод, и когда он находился в переменной, он не вел себя должным образом, поэтому он отображал 2 (как мне показалось, когда я его тоже удалял), но Это была комбинация комментария от @aschipfl с удалением символа "" для установленных переменных и того, как я структурировал его ниже. Итак, мое окончательное решение, которое сработало для меня:

setlocal enabledelayedexpansion

REM The Root to start searching from
SET "InstallSets=D:\InstallSets"

REM Folders to not search with in
SET ExcludeStr=findstr /I /v ^"\Master Files \Training \Software^"

REM Folders to search in only
SET DoOnlyStr=findstr /I ^"\US_Site4 \US_Site5^"

for /f "delims=*" %%F IN ('dir /s /b /on "!InstallSets!" ^| findstr /E /C:"Config.xml" ^| !ExcludeStr!') do (
    (ECHO "%%F"| %DoOnlyStr% 1>NUL) && (
       ECHO "%%F"...
   )
)

Не уверен, почему !DoOnlyStr! не сработал, хотя и должен был быть %DoOnlyStr%, как у меня setlocal enabledelayedexpansion в начале

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