Batch - rotierender Zielordner, Variabel für Robocopy Job
Hallo,
ich hätte gerne eine Batch Datei gehabt mit einem Robocopy Job
deren Zielordner sich bei jedem Start der Batchdatei ändert.
Das also zB. automatisch immer zwischen 4 verschiedenen Zielordnern rotiert wird.
1x Batch gestartet = Zielordner 1
2x Batch gestartet = Zielordner 2
3x Batch gestartet = Zielordner 3
4x Batch gestartet = Zielordner 4
5x Batch gestartet = Zielordner 1
.
.
Hab das soweit eigentlich schon gelöst aber hmmm najo ziemlich unschön wie ich finde.
Wie könnte man das kürzer/schöner realisieren?
Die bisherige Lösung:
(Eine der Textfiles sowie die möglichen Zielordner müssen bereits erstellt sein.)
Danke sehr!
Gruß
Martin
ich hätte gerne eine Batch Datei gehabt mit einem Robocopy Job
deren Zielordner sich bei jedem Start der Batchdatei ändert.
Das also zB. automatisch immer zwischen 4 verschiedenen Zielordnern rotiert wird.
1x Batch gestartet = Zielordner 1
2x Batch gestartet = Zielordner 2
3x Batch gestartet = Zielordner 3
4x Batch gestartet = Zielordner 4
5x Batch gestartet = Zielordner 1
.
.
Hab das soweit eigentlich schon gelöst aber hmmm najo ziemlich unschön wie ich finde.
Wie könnte man das kürzer/schöner realisieren?
Die bisherige Lösung:
(Eine der Textfiles sowie die möglichen Zielordner müssen bereits erstellt sein.)
@echo off & setlocal
if exist "D:\_batch\4.txt" goto 1
if exist {{comment_strings:33721862925}} goto 2
if exist {{comment_strings:32191424867}} goto 3
if exist "D:\_batch\3.txt" goto 4
:1
set var=freitag1
ren "D:\_batch\4.txt" "1.txt"
goto copy
:2
set var=freitag2
ren "D:\_batch\1.txt" {{comment_strings:41361258055}}
goto copy
:3
set var=freitag3
ren "D:\_batch\2.txt" "3.txt"
goto copy
:4
set var=freitag4
ren {{comment_strings:34157457316}} "4.txt"
goto copy
:copy
robocopy.exe "D:\_batch\quelle" {{comment_strings:3348082501}} /COPYALL /DCOPY:T /MIR /r:0
Danke sehr!
Gruß
Martin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 166645
Url: https://administrator.de/contentid/166645
Ausgedruckt am: 21.11.2024 um 16:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo m.fessler und willkommen im Forum!
Eigentlich ginge es doch darum, den jeweils ältesten Ordner zu verwenden - daher würde ich es (unter der Annahme, dass bereits alle 4 Ordner existieren) etwa so versuchen:
Wenn Du danach den gefundenen Ordner löschst und neu erstellst, sollte das eigentlich klappen ...
Grüße
bastla
Eigentlich ginge es doch darum, den jeweils ältesten Ordner zu verwenden - daher würde ich es (unter der Annahme, dass bereits alle 4 Ordner existieren) etwa so versuchen:
for /f "delims=" %%i in ('dir /s /ad /o-d "D:\_batch\ziel\freitag?"') do set "var=%%i"
Grüße
bastla
Hallo m.fessler!
Wenn Du Dir mit "
Damit das funktionieren kann, muss zunächst die "Aktuell.txt" mit dem Inhalt "100" erstellt werden. Weshalb nicht "00"? Wenn eine Zahl mit "0" beginnt, wird sie als Oktalzahl interpretiert, und da die höchste Ziffer im 8er-System "7" ist, kann mit "08" und "09" nicht gerechnet werden. Als Workaround wird einfach mit drei- (oder auf Wunsch auch mehr-als-drei- ) stelligen Zahlen gerechnet - davon können dann die letzten beiden Stellen (als "Text") auch mit führenden Nullen verwendet werden.
In Zeile 4 siehst Du übrigens die einfachste Möglichkeit, die erste Zeile einer Datei in eine Variable einzulesen (ist nicht unmittelbar der Hilfe mit "
Daher: Es ist durchaus möglich, die Reihenfolge anhand von Nummern festzulegen, aber Du musst mehr Aufwand dafür treiben ...
Grüße
bastla
[Edit] Anführungszeichen in Zeile 6 ergänzt [/Edit]
Wenn Du Dir mit "
dir /?
" die Online-Hilfe ansiehst, kannst Du vermutich die meisten Fragen selbst beantworten - um Dir aber trotzdem ein wenig Starthilfe zu geben:Es wird das Änderungsdatum und nicht das Erstellungsdatum ausgewertet - richtig? Passt aber eh!
"Ändern" lässt sich mit einem zusätzlichen "/tc
" ändern was er da genau macht?
... ist, in einer Schleife ein passend (nach Alter) sortiertes Inhaltverzeichnis nur der Ordner, die der Namens-Vorgabe "freitag + 0 oder 1beliebiges Zeichen" entsprechen, auszugeben, sich dabei auf die Namen zu beschränken (dafür wird "/b
" benötigt), und jeweils den aktuellen Namen in %var% zu speichern - natürlich wird dabei der vorherige Inhalt überschrieben, weshalb nach der Schleife der zuletzt ausgegebene Name (deswegen die Sortierung) in %var% verbleibt.Geht so ein Ein- oder Zweizeiler auch wenn zB. eine vorhergehende zweistellige Nummerierung (01_ordner, 02_ordner...) ausgewertet werden soll
und dann praktisch immer der "nächst höhere" Ordner zum Zuge kommen soll bis zur Zahl X dann soll es wieder von vorne beginnen.
Sortieren kannst Du zwar auch nach Namen, aber Du müsstest ja wissen, welcher Ordner zuletzt verwendet wurde - womit wir wieder beim Timestamp oder einer zusätzlich mitzuführenden Datei für die Nummer wären. Mit einer derartigen Datei könnte das etwa so gehen (als Beispiel für maximal 20 Ordner - siehe Zeile 2):und dann praktisch immer der "nächst höhere" Ordner zum Zuge kommen soll bis zur Zahl X dann soll es wieder von vorne beginnen.
@echo off & setlocal
set MaxNr=120
set "Aktuell=Aktuell.txt"
set /p Nr=<"%Aktuell%"
set /a Nr+=1
if %Nr% gtr %MaxNr% set "Nr=101"
>"%Aktuell%" echo %Nr%
set "Ordner=%Nr:~-2%_Ordner"
echo Naechster Ordner: %Ordner%
In Zeile 4 siehst Du übrigens die einfachste Möglichkeit, die erste Zeile einer Datei in eine Variable einzulesen (ist nicht unmittelbar der Hilfe mit "
set /?
" zu entnehmen, sondern ein "Biber-Special").Daher: Es ist durchaus möglich, die Reihenfolge anhand von Nummern festzulegen, aber Du musst mehr Aufwand dafür treiben ...
Grüße
bastla
[Edit] Anführungszeichen in Zeile 6 ergänzt [/Edit]
Hallo m.fessler!
Abgesehen davon, dass diese Zusatzfrage nur schwer unter den Threadtitel zu subsumieren ist, hatten wir Ähnliches mal hier ...
... aber konkret zu Deiner Zeile:
Grüße
bastla
Abgesehen davon, dass diese Zusatzfrage nur schwer unter den Threadtitel zu subsumieren ist, hatten wir Ähnliches mal hier ...
... aber konkret zu Deiner Zeile:
for /f "tokens=5-9" %%i in ('psinfo -d volume 2^>nul ^|findstr /c:"S:"')do echo %%i %%j %%k %%l %%m
bastla