批文件文件夹检测

是的,我知道在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循环的变体。