好,前两行似乎确定。
问题与其余。
%%f|findstr /i OUT > nul:
嗯,没有您需要的文件名ECHO
到FINDSTR
和目标串"OUT"
应该被引用 和NUL
冒号后是没有必要或往常一样 - 但无害。
ECHO %%f|findstr /i "OUT" > nul
IF %errorlevel% == 0 (
常见的错误。当对LOGICAL命令进行解析(并且这意味着从FOR
直到后面的6个关闭括号),ANY%var%将被替换为当前值%var%,然后对结果执行该命令。因此,%ERRORLEVEL%将被在PARSE-TIME处的ERRORLEVEL值所替代。
您需要使用原始IF ERRORLEVEL
形式,"IF ERRORLEVEL n"
这意味着“如果错误级别为N或多于N”这种形式阐述了当前的(即运行时)ERRORLEVEL的值。
IF NOT ERRORLEVEL 1 (
(即如果错误级别不(超过11或更大))
cd %%f
是啊,这会工作。问题在于你将设置%% f作为当前目录。可能似乎是你想要的,但是...
del .
呃,不 - 试图删除当前目录中的所有文件并需要响应。
您正在寻找
RD .
,但你不能删除当前目录。
那么 - 该怎么办?
简单
RD %%f /S /Q
哪些应该删除该目录%% f和它的子目录(/ S)和无提示机构(/ Q)
BUT PLEASE INSERT AN ECHO BEFORE THIS COMMAND FOR TESTING
因此,建议删除显示而不是死刑(在错误的情况下...)
ECHO RD %%f /S /Q
所以修改后的批量变得
cd root
FOR /f %%f in ('dir /ad /b /s') do (
ECHO %%f|findstr /i "OUT" > nul
IF NOT ERRORLEVEL 1 (
ECHO RD %%f /S /Q
)
)
可以通过使用
cd root
FOR /f %%f in ('dir /ad /b /s *OUT*') do (
ECHO RD %%f /S /Q
)
而最后一个问题可能是,它可能是你想删除一个*OUT*
子目录丝毫本身就蕴含着更简单地完成*OUT*
子目录。由于FOR工作方式的原因,您可能会发现,当您到达较低层目录时,较高的工作区已被删除,因此较低的目录将不存在,并且您会收到一条丑陋的eror消息。
追加2>NUL
到RD命令应该抑制错误信息
您是否尝试过调试吗? – 2013-03-12 10:18:22