批处理文件中的嵌套循环以进行清理

时间:2016-08-05 15:35:03

标签: batch-file for-loop

这应该很简单..

我们在Windows服务器上有以下结构:

  • d:\供应商1
  • d:\供应商2
  • d:\ tomcat1
  • d:\ tomcat2

我们需要存档和管理日志。这种结构将是我的偏好:

REM REMOVE ANY ZERO-BYTE FILES
FOR %%d IN (1,2) DO (
    FOR /r D:\vendor%%d\logs %%X IN (*) DO IF %%~zX LSS 1 (DEL /Q "%%X")
    FOR /r D:\vendor%%d\other_logs %%X IN (*) DO IF %%~zX LSS 1 (DEL /Q "%%X")
    FOR /r D:\tomcat%%d\logs %%X IN (*) DO IF %%~zX LSS 1 (DEL /Q "%%X")
)
pause

奇怪的是,这似乎也不起作用。

REM REMOVE ANY ZERO-BYTE FILES
for %%d in (1,2) do call :process_dir %%d
goto :eof

:process_dir
FOR /r D:\vendor%1\logs %%X IN (*) DO IF %%~zX LSS 1 (DEL /Q "%%X")
FOR /r D:\vendor%1\other_logs %%X IN (*) DO IF %%~zX LSS 1 (DEL /Q "%%X")
FOR /r D:\tomcat%1\logs %%X IN (*) DO IF %%~zX LSS 1 (DEL /Q "%%X")

谢谢!

1 个答案:

答案 0 :(得分:0)

我想出来了..

REM REMOVE ANY ZERO-BYTE FILES
FOR %%d IN (1,2) DO (
    SET /A PTR=%%d
    FOR /r D:\vendor%PTR%\logs %%X IN (*) DO IF %%~zX LSS 1 (DEL /Q "%%X")
    FOR /r D:\vendor%PAR%\other_logs %%X IN (*) DO IF %%~zX LSS 1 (DEL /Q "%%X")
    FOR /r D:\tomcat%PTR%\logs %%X IN (*) DO IF %%~zX LSS 1 (DEL /Q "%%X")
)
pause

此处的关键是SET /A