2016-08-05 15 views
0

Dies sollte ziemlich einfach sein ..Verschachtelte Schleife in einer Batch-Datei für die Bereinigung

Wir haben die folgende Struktur auf einem Windows-Server:

  • D: \ Hersteller1
  • D: \ vendor2
  • D: \ tomcat1
  • D: \ tomcat2

Und wir brauchen t o Protokolle archivieren und verwalten. Diese Struktur würde meine Vorliebe sein:

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 

Und die seltsame Sache ist, dass dies auch nicht zu funktionieren scheint.

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") 

Vielen Dank!

+0

ist wie Sie es haben. – Squashman

+0

Ihr erster Ansatz kann nicht funktionieren, da 'for/R' keine anderen' for' Variablen im Pfad nach '/ R' akzeptiert; es akzeptiert auch keine verzögerten Expansionsvariablen; Sie können nur normale Prozentvariablen oder Argumentverweise wie '% 1' verwenden; für mich funktioniert Ihr zweiter Ansatz gut ... Haben Ihre realen Pfade Leerzeichen? Versuchen Sie, jeden Pfad richtig anzugeben ... – aschipfl

Antwort

0

ich es herausgefunden ..

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 

Der Schlüssel hier das ich den Anruf Prozess nur zu arbeiten, bekam SET /A

+0

Hmm. Funktioniert immer noch nicht für mich. Nicht einmal wenn ich eine verzögerte Expansion verwende. – Squashman