是的,我知道在batch file中使用时,需要将%a加倍为%% a。 ;)
这有效,但不给我我想要的结果 – 这太多了..
FOR /f %a IN ('dir "D:\tomcat*" /ad /b ') DO FOR /f %b IN ('dir "D:\%a\webapps" /ad /b ') DO ECHO D:\%a\webapps\%b
我真正想做的是:
FOR /f %a IN ('dir "D:\tomcat*\webapps" /ad /b ') DO ECHO %a
但是,我得到了由此产生的错误:
文件名,目录名称或卷标语法不正确。
我想这样做,因为我需要检测哪些文件夹中有tomcat,可能是以下任何一种:
D:\tomcat D:\tomcat1 D:\tomcat2 D:\tomcat_1 etc.
谢谢!
你可以使用IF EXIST
FOR /f %a IN ('dir "D:\tomcat*" /ad /b ') DO IF EXIST "%~a\webapps\nul" dir /b "%~a\webapps"
\nul
是检查文件夹是否存在 。
通配符( ?
和*
)只能用于路径的最后一项,所以您必须解决这个问题。
作为您正在使用的嵌套for
循环的替代方法,您还可以执行以下操作:
for /F "eol=| delims=" %A in ('dir /A:D /B "D:\tomcat*"') do (> nul 2>&1 dir /A:D "%~A\webapps" && echo "%~A")
这会输出名称中包含tomcat
所有文件夹, 并且有一个名为webapps
的子目录。
您需要为for /F
提供选项字符串"eol=| delims="
; 这也适用于具有两个嵌套for
循环的变体。