kallewirsch
Goto Top

CMD - Batch - For-Schleife-Übergabe

Hallo Forum,

ich habe folgende Verzeichnisstruktur:
D:\Ordner_A\Unterordner_A\2011\01\01
D:\Ordner_A\Unterordner_A\2011\01\02
D:\Ordner_A\Unterordner_A\2011\01\03
D:\Ordner_A\Unterordner_A\2011\01\04
...
...
D:\Ordner_A\Unterordner_A\2011\01\31
D:\Ordner_A\Unterordner_A\2011\02\01
D:\Ordner_A\Unterordner_A\2011\02\02
D:\Ordner_A\Unterordner_A\2011\02\03
D:\Ordner_A\Unterordner_A\2011\02\04
...
...
D:\Ordner_A\Unterordner_A\2011\02\28
D:\Ordner_A\Unterordner_A\2011\03\01
D:\Ordner_A\Unterordner_A\2011\03\02
D:\Ordner_A\Unterordner_A\2011\03\03
D:\Ordner_A\Unterordner_A\2011\03\04
...
...
D:\Ordner_A\Unterordner_A\2011\03\31
...
...
...
...
D:\Ordner_A\Unterordner_A\2011\12\01
D:\Ordner_A\Unterordner_A\2011\12\02
D:\Ordner_A\Unterordner_A\2011\12\03
D:\Ordner_A\Unterordner_A\2011\12\04
...
...
D:\Ordner_A\Unterordner_A\2011\12\31

Ich möchte dann im Batch folgendes erreichen:
1. Ermitteln wieviele Tagesverzeichnisse im aktuellen Monatsverzeichniss
2. Die im aktuellen Tagesverzeichniss vorhandenen Dateien solle dann alle im zugehörigen Monat zu einem Tageszip nach
der Benennenung TT.zip mit 7za.exe gepackt werden.
3. Der beim ZIP-Vorgang entstehende Errorcode muss abgeprüft werden, gleich NULL, dann alle in das ARCHIV gepackte
Dateiein löschen.
4. Beim auftretenden Monatswechsel solle dann alle Archive des Vormonats zu einem Archiv mit der Bezeichnung MM.ZIP
gepackt werden, ebenfalls den ERRORLEVEL abfragen, wenn gleich NULL, dann die in das ARCHIV gepackte Dateien (also die
Tageszips) löschen.
5. Das wars....

Ich habe den Punkt 1 mit folgender FOR-Schleife:
for /D %%m in (D:\Ordner_A\Unterordner_A\2011\*) do (for /D %%d in (%%m\*) do echo %%d)
Damit schaffe ich, sowohl, die Monats- und Tagesverzeichnisse auszugeben.

Und das wars, ich bekomme es irgendwie nicht hin....
Ich hatte eigentlich geplant, anstelle des echo %%d eine weitere for-Schleife mit dem Parameter /F und delims und tokens zu arbeiten, aber....

Nun hoffe ich auf Eure Unterstützung.

Vielen Dank Forum.

Content-Key: 194999

Url: https://administrator.de/contentid/194999

Ausgedruckt am: 28.03.2024 um 15:03 Uhr

Mitglied: bastla
bastla 27.11.2012 aktualisiert um 22:21:35 Uhr
Goto Top
Hallo kallewirsch!

Versuch mal, auf dieser Grobstruktur aufzubauen:
@echo off & setlocal
set "Basis=D:\Ordner_A\Unterordner_A"  
set "Jahr=2011"  

for /d %%m in ("%Basis%\%Jahr%\*") do (  
    echo Beginn Monat: %%~nm
    for /d %%d in ("%%m\*") do (  
        echo Datum: %Jahr%-%%~nm-%%~nd
    )
    echo Ende Monat: %%~nm
    echo #################
)
In der Online-Hilfe (mit "for /?") findest Du gegen Ende eine Erklärung zu "%%~nm" ...

Grüße
bastla
Mitglied: Friemler
Friemler 27.11.2012 aktualisiert um 23:06:08 Uhr
Goto Top
Hallo kallewirsch,

hier noch was zum Testen:
@echo off & setlocal

pushd "%~dp0"  


set "BaseDir=D:\Ordner_A\Unterordner_A"  
set "7Zip=.\7za.exe"  

set "VBScript1=%TEMP%\GetCurDate.vbs"  
set "VBScript2=%TEMP%\GetDayBefore.vbs"  


> "%VBScript1%" echo.WScript.Echo CStr(Day(Date)) + "." + CStr(Month(Date)) + "." + CStr(Year(Date))  

> "%VBScript2%" echo.intDay   = WScript.Arguments(0)  
>>"%VBScript2%" echo.intMonth = WScript.Arguments(1)  
>>"%VBScript2%" echo.intYear  = WScript.Arguments(2)  
>>"%VBScript2%" echo.  
>>"%VBScript2%" echo.vntTheDay    = DateSerial(intYear, intMonth, intDay)  
>>"%VBScript2%" echo.vntDayBefore = DateAdd("d", -1, vntTheDay)  
>>"%VBScript2%" echo.  
>>"%VBScript2%" echo.WScript.Echo CStr(Day(vntDayBefore)) + "." + CStr(Month(vntDayBefore)) + "." + CStr(Year(vntDayBefore))  


for /f "tokens=1-3 delims=." %%a in ('cscript /nologo "%VBScript1%"') do (  
  for /f "delims=" %%n in ('dir /b /a:-d "%BaseDir%\%%c\%%b\%%a" ^| find /v /c "\"') do (  
    echo %%n Dateien in %BaseDir%\%%c\%%b\%%a
  )

  "%7Zip%" a -tzip "%BaseDir%\%%c\%%b\%%a.zip" "%BaseDir%\%%c\%%b\%%a\*.*" > NUL && (  
    del "%BaseDir%\%%c\%%b\%%a\*.*"  
  )

  if %%a equ 1 (
    for /f "tokens=1-3 delims=." %%d in ('cscript /nologo "%VBScript2%" %%a %%b %%c') do (  
      "%7Zip%" a -tzip "%BaseDir%\%%f\%%e.zip" "%BaseDir%\%%f\%%e\*.zip" > NUL && (  
        del "%BaseDir%\%%f\%%e\*.zip"  
      )
    )
  )
)

del "%VBScript1%"  
del "%VBScript2%"  

popd
Sollte auch beim Jahreswechsel funktionieren.

Gruß
Friemler