For-Schleife für Logdatei und Move Files
Hallo zusammen,
ich versuche gerade einen Batch zu schreiben der generierte Dateien verschiebt und diese Aktionen dann in eine Logdatei schreibt.
Das mit dem verschieben und erstellen der Logdatei ist soweit kein Problem, außerhalb der For-Schleife.
Wenn ich das aber nun alles etwas kompakter verpacken möchte bleib ich hängen. Habe seit heute Morgen gegooglt um das Problem zu lösen und eine kleine Schraube scheint noch zu fehlen.
Aber ich weiß nicht mehr weiter.
Es geht um die FOR Schleife. Soweit ich das richtig verstanden habe wird der code wie folgt ausgeführt: ich suche nach Dateien im Pfad %Quelle% und springe dann in die Funktion :DoMove und nehme dabei den aktuellen Wert der ersten Datei mit -> %%A.
In der Funktion sage ich dann, die Datei unter dem Wert %%A soll in den Ordner %ORDNER_DMY% verschoben werden.
Wenn Errorlevel gleich 0, also kein Fehler, dann Datei mit dem Wert %1... --- Obwohl ich mir nicht wirklich sicher bin mit dem %1, ob das in diesem Fall funktioniert bzw nicht passt. So ganz verstanden hab ich das noch nicht wie das funktioniert.
Was passiert momentan: Datum wird ausgegeben und er gibt eine Fehlermeldung 1 das die Datei " " nicht verschoben werden konnte.
Also einmal funktioniert der Move nicht und zweitens kriegt er nicht den Variablen namen von der aktuellen Datei :S Aber ich bin momentan überfragt wie man das am besten macht.
ich versuche gerade einen Batch zu schreiben der generierte Dateien verschiebt und diese Aktionen dann in eine Logdatei schreibt.
Das mit dem verschieben und erstellen der Logdatei ist soweit kein Problem, außerhalb der For-Schleife.
Wenn ich das aber nun alles etwas kompakter verpacken möchte bleib ich hängen. Habe seit heute Morgen gegooglt um das Problem zu lösen und eine kleine Schraube scheint noch zu fehlen.
Aber ich weiß nicht mehr weiter.
@echo on
set LOGFILE=batch_movefiles.log
set Quelle="H:\Entwicklung\FD50 Bank\Bank"
REM Aktuelles Datum holen und die Punkte durch Striche ersetzen (DMY -> D=Day; M=Month; Y=Year)
SET CURRENTDATE_DMY=%DATE:.=-%
REM Datum nur mit Jahr (Y) ausgeben >>
SET CURRENTDATE_Y=%CURRENTDATE_DMY:~6,8%
REM Datum nur mit Monat und Jahr (MY) ausgeben
SET CURRENTDATE_MY=%CURRENTDATE_DMY:~3,8%
REM Pfad als Variable zwischenspeichern, da Leerzeichen im Pfad enthalten sind.
SET ORDNER_DMY="H:\Entwicklung\FD50 Bank\Einnahmeverwaltung\Sollstellung\%CURRENTDATE_Y%\%CURRENTDATE_MY%\%CURRENTDATE_DMY%"
REM Verzeichnis erstellen
MKDIR %ORDNER_DMY%
>>%LOGFILE% echo Datum: %date%
FOR %%A IN ("%quelle%\*.*") Do call :DoMove %%A
:DoMove
MOVE %%A "%ORDNER_DMY%"
IF %Errorlevel% EQU 0 (
>>%LOGFILE% Echo %time% Datei %1 erfolgreich verschoben
) Else (
>>%LOGFILE% Echo %time% Datei %1 NICHT verschoben, Fehler %Errorlevel%
)
goto:eof
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>%LOGFILE%
Es geht um die FOR Schleife. Soweit ich das richtig verstanden habe wird der code wie folgt ausgeführt: ich suche nach Dateien im Pfad %Quelle% und springe dann in die Funktion :DoMove und nehme dabei den aktuellen Wert der ersten Datei mit -> %%A.
In der Funktion sage ich dann, die Datei unter dem Wert %%A soll in den Ordner %ORDNER_DMY% verschoben werden.
Wenn Errorlevel gleich 0, also kein Fehler, dann Datei mit dem Wert %1... --- Obwohl ich mir nicht wirklich sicher bin mit dem %1, ob das in diesem Fall funktioniert bzw nicht passt. So ganz verstanden hab ich das noch nicht wie das funktioniert.
Was passiert momentan: Datum wird ausgegeben und er gibt eine Fehlermeldung 1 das die Datei " " nicht verschoben werden konnte.
Also einmal funktioniert der Move nicht und zweitens kriegt er nicht den Variablen namen von der aktuellen Datei :S Aber ich bin momentan überfragt wie man das am besten macht.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 398203
Url: https://administrator.de/forum/for-schleife-fuer-logdatei-und-move-files-398203.html
Ausgedruckt am: 02.05.2025 um 00:05 Uhr
4 Kommentare
Neuester Kommentar