CMD - Batch - For-Schleife-Übergabe
Hallo Forum,
ich habe folgende Verzeichnisstruktur:
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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 194999
Url: https://administrator.de/contentid/194999
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo kallewirsch!
Versuch mal, auf dieser Grobstruktur aufzubauen:
In der Online-Hilfe (mit "
Grüße
bastla
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 #################
)
for /?
") findest Du gegen Ende eine Erklärung zu "%%~nm
" ...Grüße
bastla
Hallo kallewirsch,
hier noch was zum Testen:
Sollte auch beim Jahreswechsel funktionieren.
Gruß
Friemler
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
Gruß
Friemler