Batch Automatische Auswahl von erstelltem Ordner, nur wie?
Hallo zusammen,
Ich hänge grade an einer Batch fest und hoffe das ihr mir in meiner denk-Blockade helfen könnt:
Ausgangssituation:
Ein Programm erzeugt eine Backup-File. Da eine Automatische Einordnung nicht möglich ist, will ich die per Batch machen. Diese Einordnung soll folgender Regel folgen. Es gibt 4 unter-Ordner, für jede Woche einen. Beim start des skripts wird zunächst der Ordner mit dem alter von über 28 Tagen gelöscht, anschließend dieser neu erzeugt. Anschließend soll die Datei in den grade neu erstellten Ornder verschoben werden. und da hänge ich jetzt, ich weis nicht wie dem Copy-Befehl sage, das es den grade erzeugten Ordner als Ziel wählen soll.
Ich hänge grade an einer Batch fest und hoffe das ihr mir in meiner denk-Blockade helfen könnt:
Ausgangssituation:
Ein Programm erzeugt eine Backup-File. Da eine Automatische Einordnung nicht möglich ist, will ich die per Batch machen. Diese Einordnung soll folgender Regel folgen. Es gibt 4 unter-Ordner, für jede Woche einen. Beim start des skripts wird zunächst der Ordner mit dem alter von über 28 Tagen gelöscht, anschließend dieser neu erzeugt. Anschließend soll die Datei in den grade neu erstellten Ornder verschoben werden. und da hänge ich jetzt, ich weis nicht wie dem Copy-Befehl sage, das es den grade erzeugten Ordner als Ziel wählen soll.
mkdir C:\Users\Bla\Desktop\TEMP
robocopy.exe C:\Users\Bla\Desktop\abc\*.* C:\Users\Bla\Desktop\TEMP /E /MOVE /MINAGE:28 /R:1 /W:1 /MT
rmdir C:\Users\Bla\Desktop\TEMP
if exist C:\Users\Bla\Desktop\abc\1 (
goto Prüfung Woche2
) Else
mkdir C:\Users\Bla\Desktop\abc\1
goto Kopieren
)
:Prüfung Woche2
if exist C:\Users\Bla\Desktop\abc\2 (
goto Prüfung Woche3
) Else
mkdir C:\Users\Bla\Desktop\abc\2
goto Kopieren
)
:Prüfung Woche3
if exist C:\Users\Bla\Desktop\abc\3 (
goto Prüfung Woche4
) Else
mkdir C:\Users\Bla\Desktop\abc\3
goto Kopieren
)
:Prüfung Woche4
if exist C:\Users\Bla\Desktop\abc\4 (
goto Kopieren
) Else
mkdir C:\Users\Bla\Desktop\abc\4
goto Kopieren
)
:Kopieren
%ZIEL%=XXXXXXXXXXXXXXXXXXXXXXX
robocopy.exe C:\Users\Bla\Desktop\Twingo %ZIEL% /MT /R:1 /W:1
pause
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 392320
Url: https://administrator.de/contentid/392320
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
3 Kommentare
Neuester Kommentar
Moin.
An deiner Stelle würde ich es mir etwas einfacher machen: Soweit ich es verstehe, läuft dein Backup immer in den gleichen Ordner.
Von hier aus würde ich dann vier Copy-Jobs laufen lassen (jeden dabei nur jede vierte Woche, der Start der Jobs muss also um je eine Woche versetzt werden), welche direkt die Quelle in das Ziel spiegeln.
Damit hättest du eine feste Einplanung: In Woche 1 wird in "abc\1" gesichert, in Woche 2 startet der Copy-Job nach "abc\2" etc...
Grüße
An deiner Stelle würde ich es mir etwas einfacher machen: Soweit ich es verstehe, läuft dein Backup immer in den gleichen Ordner.
Von hier aus würde ich dann vier Copy-Jobs laufen lassen (jeden dabei nur jede vierte Woche, der Start der Jobs muss also um je eine Woche versetzt werden), welche direkt die Quelle in das Ziel spiegeln.
Damit hättest du eine feste Einplanung: In Woche 1 wird in "abc\1" gesichert, in Woche 2 startet der Copy-Job nach "abc\2" etc...
Grüße
Hallo Aschnack1,
die simple Vorgehensweise, die FireWALL vorschlug ist vielleicht vorzuziehen, dennoch möchte ich Deine Frage beantworten.
Verwende "Kopieren" nicht als einfaches Sprungziel, sondern als Funktion.
Das geht indem Du statt
(Den Doppelpunkt vor "Sprungziel" nicht vergessen)
So kannst Du dem Sprungziel (der Funktionen) den gewünschten Wert mitgeben.
Den Hauptcode musst Du zusätzlich mit
Es muss dann
Um das Weitermachen zu verhindern (abzuwürgen) kannst Du ein
Hier der ungestestete Code dazu:
Alternativ kannst Du Deinen Code im Prinzip belassen wie er ist, aber die Variable %ZIEL% schon in den Fallunterscheidungen belegen.
Das erscheint mir hier die einfachere und bessere Lösung zu sein, als die Verwendung einer Funktion.
Das könnte ungetestet so aussehen:
Noch ein allgemeiner Tipp:
Verwende generell keine Leerzeichen in den Bezeichnern der Sprungziele, denn sonst sind Bezeichner und Parameter schlecht auseinanderzuhalten.
Schlecht:
Besser:
Gruß Frank
die simple Vorgehensweise, die FireWALL vorschlug ist vielleicht vorzuziehen, dennoch möchte ich Deine Frage beantworten.
Verwende "Kopieren" nicht als einfaches Sprungziel, sondern als Funktion.
Das geht indem Du statt
goto Sprungziel
zu verwenden call :Sprungziel Parameter
verwendest.(Den Doppelpunkt vor "Sprungziel" nicht vergessen)
So kannst Du dem Sprungziel (der Funktionen) den gewünschten Wert mitgeben.
Den Hauptcode musst Du zusätzlich mit
exit /b
oder goto :eof
terminieren und Funktion(en) danach deklarieren.Es muss dann
call
verwendet werden, was dazu führt, dass nach dem Funktionsaufruf die Ausführung zurückkehrt und mit der nächsten Zeile im Hauptcode weitermacht, was aber hier nicht gewünscht ist.Um das Weitermachen zu verhindern (abzuwürgen) kannst Du ein
goto fertig
einsetzen.Hier der ungestestete Code dazu:
mkdir C:\Users\Bla\Desktop\TEMP
robocopy.exe C:\Users\Bla\Desktop\abc\*.* C:\Users\Bla\Desktop\TEMP /E /MOVE /MINAGE:28 /R:1 /W:1 /MT
rmdir C:\Users\Bla\Desktop\TEMP
if exist C:\Users\Bla\Desktop\abc\1 (
goto Prüfung Woche2
) Else
mkdir C:\Users\Bla\Desktop\abc\1
call :Kopieren C:\Users\Bla\Desktop\abc\1
goto fertig
)
:Prüfung Woche2
if exist C:\Users\Bla\Desktop\abc\2 (
goto Prüfung Woche3
) Else
mkdir C:\Users\Bla\Desktop\abc\2
call :Kopieren C:\Users\Bla\Desktop\abc\2
goto fertig
)
:Prüfung Woche3
if exist C:\Users\Bla\Desktop\abc\3 (
goto Prüfung Woche4
) Else
mkdir C:\Users\Bla\Desktop\abc\3
call :Kopieren C:\Users\Bla\Desktop\abc\3
goto fertig
)
:Prüfung Woche4
if exist C:\Users\Bla\Desktop\abc\4 (
call :Kopieren C:\Users\Bla\Desktop\abc\4
goto fertig
) Else
mkdir C:\Users\Bla\Desktop\abc\4
call :Kopieren C:\Users\Bla\Desktop\abc\4
goto fertig
)
:fertig
pause
exit /b
REM hier endet der Hauptcode
REM beginnt die aufzurufende Funktion
REM %1 beinhaltet den ersten übergebenen Parameter
:Kopieren
%ZIEL%=%1
robocopy.exe C:\Users\Bla\Desktop\Twingo %ZIEL% /MT /R:1 /W:1
Alternativ kannst Du Deinen Code im Prinzip belassen wie er ist, aber die Variable %ZIEL% schon in den Fallunterscheidungen belegen.
Das erscheint mir hier die einfachere und bessere Lösung zu sein, als die Verwendung einer Funktion.
Das könnte ungetestet so aussehen:
mkdir C:\Users\Bla\Desktop\TEMP
robocopy.exe C:\Users\Bla\Desktop\abc\*.* C:\Users\Bla\Desktop\TEMP /E /MOVE /MINAGE:28 /R:1 /W:1 /MT
rmdir C:\Users\Bla\Desktop\TEMP
if exist C:\Users\Bla\Desktop\abc\1 (
goto Prüfung Woche2
) Else
mkdir C:\Users\Bla\Desktop\abc\1
set ZIEL=C:\Users\Bla\Desktop\abc\1
goto Kopieren
)
:Prüfung Woche2
if exist C:\Users\Bla\Desktop\abc\2 (
goto Prüfung Woche3
) Else
mkdir C:\Users\Bla\Desktop\abc\2
set ZIEL=C:\Users\Bla\Desktop\abc\2
goto Kopieren
)
:Prüfung Woche3
if exist C:\Users\Bla\Desktop\abc\3 (
goto Prüfung Woche4
) Else
mkdir C:\Users\Bla\Desktop\abc\3
set ZIEL=C:\Users\Bla\Desktop\abc\3
goto Kopieren
)
:Prüfung Woche4
if exist C:\Users\Bla\Desktop\abc\4 (
set ZIEL=C:\Users\Bla\Desktop\abc\4
goto Kopieren
) Else
mkdir C:\Users\Bla\Desktop\abc\4
set ZIEL=C:\Users\Bla\Desktop\abc\4
goto Kopieren
)
:Kopieren
robocopy.exe C:\Users\Bla\Desktop\Twingo %ZIEL% /MT /R:1 /W:1
pause
Noch ein allgemeiner Tipp:
Verwende generell keine Leerzeichen in den Bezeichnern der Sprungziele, denn sonst sind Bezeichner und Parameter schlecht auseinanderzuhalten.
Schlecht:
@echo off
call :Sprungziel Parameter
goto Sprungziel Parameter
echo Dieser Text wird nie gezeigt
:Sprungziel Parameter
echo Sprungziel Parameter
exit /b
:Sprungziel
echo Sprungziel %1
Besser:
@echo off
call :Sprungziel Parameter
goto Sprungziel_Parameter
echo Dieser Text wird nie gezeigt
:Sprungziel_Parameter
echo Sprungziel_Parameter
exit /b
:Sprungziel
echo Sprungziel %1