如果这很明显,请原谅我,但是我有此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的其他操作。
亲切的问候
亚当
答案 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