多重值的findstr

时间:2018-07-02 11:50:23

标签: batch-file variables for-loop

如果这很明显,请原谅我,但是我有此for循环的行为,该循环遍历某些命名目录(US_Site4等),并读取每个目录中的配置文件以分别为每个目录运行命令: / p>

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 :(得分:0)

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