Verschiedene Dateien Verschieben und alte version umbenennen
Ich bin ein absoluter Neuling im umgang mit Batch und
brauche dringend hilfe.
Hab schon das Forum durchsucht, find aber irgendwie nicht das was ich suche oder ich versteh es nicht.
Bitte um Hilfe!
Ich habe 2 Ordner (Input und Work). In beiden Ordern befinden sich 5 Unterordner die in Input und Work gleich benannt sind.
Im Inputordner befinden sich verschiedene dateien (.pdf, .doc, .docx, ...)
Ich möchte jetzt das alle dateien aus den Unterordnern von Input in die jeweiligen Unterordner von Work verschoben werden.
Weiter soll vorher geprüft werden ob eine Datei aus dem Inputordner schon im Workordner vorhanden ist.
Falls das der Fall sein sollte soll die Datei aus dem Workordner umbenannt werden
(z.B.: test.txt sol werden zu test_alt1.txt)
falls die datei test.txt jetzt zum dritten mal verschoben werden soll, dann soll test_alt1.txt zu test_alt2.txt werden
und test zu test_alt1.txt
Ich hoffe auf eure Hilfe
brauche dringend hilfe.
Hab schon das Forum durchsucht, find aber irgendwie nicht das was ich suche oder ich versteh es nicht.
Bitte um Hilfe!
Ich habe 2 Ordner (Input und Work). In beiden Ordern befinden sich 5 Unterordner die in Input und Work gleich benannt sind.
Im Inputordner befinden sich verschiedene dateien (.pdf, .doc, .docx, ...)
Ich möchte jetzt das alle dateien aus den Unterordnern von Input in die jeweiligen Unterordner von Work verschoben werden.
Weiter soll vorher geprüft werden ob eine Datei aus dem Inputordner schon im Workordner vorhanden ist.
Falls das der Fall sein sollte soll die Datei aus dem Workordner umbenannt werden
(z.B.: test.txt sol werden zu test_alt1.txt)
falls die datei test.txt jetzt zum dritten mal verschoben werden soll, dann soll test_alt1.txt zu test_alt2.txt werden
und test zu test_alt1.txt
Ich hoffe auf eure Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 140589
Url: https://administrator.de/contentid/140589
Ausgedruckt am: 25.11.2024 um 23:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo jo,
eigentlich mag ich es nicht fertige Lösungen vorzusetzen, aber dies ist ein schönes Beispiel für einen rekursiven Aufruf einer Subroutine.
Der Einfachheit halber habe ich das "alt" weggelassen und gehe davon aus das sich in den Dateinanen ansonsten kein "_" befindet.
Gruß
Lotpings
Edit zum begrenzen auf 3 archivierte Versionen zwischen Zeile 25 und 26 einfügen:
eigentlich mag ich es nicht fertige Lösungen vorzusetzen, aber dies ist ein schönes Beispiel für einen rekursiven Aufruf einer Subroutine.
Der Einfachheit halber habe ich das "alt" weggelassen und gehe davon aus das sich in den Dateinanen ansonsten kein "_" befindet.
::MoveVersion.cmd:::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off & setlocal EnableDelayedExpansion
Set SrcFld=D:\Test\2010-04\Input
Set DstFld=D:\Test\2010-04\Work
Pushd "%SrcFld%"
For /f "Delims=" %%A in ('Dir /B/S/A-D *') Do Call :Proc "%%~fA"
Popd
goto :EOF
:Proc
echo ---- %1
Set "Var=%~dp1"
Set "DestPath=!Var:%SrcFld%=%DstFld%!"
If Not Exist "%DestPath%" MD "%DestPath%"
Set "Dest=%DestPath%%~nx1"
if Exist "%Dest%" Call :VersionInc "%Dest%"
echo Move %1 "%DestPath%"
Move %1 "%DestPath%" >NUL
Goto :Eof
:VersionInc %1
Setlocal
Set Cnt=0
For /F "Tokens=1,2 delims=_" %%B in ("%~n1") Do (
Set Name=%%B
Set /A Cnt=%%C+1
)
Set "NewName=%Name%_%Cnt%%~x1"
If Exist "%~dp1%NewName%" Call :VersionInc "%~dp1%NewName%"
Echo Ren %1 "%NewName%"
Ren %1 "%NewName%"
Goto :Eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Gruß
Lotpings
Edit zum begrenzen auf 3 archivierte Versionen zwischen Zeile 25 und 26 einfügen:
If %Cnt% GTR 3 Del %1 & Goto :Eof
Hallo jo,
habe es nochmal auf einem anderen PC getestet, es geht.
Du mußt den kompletten Text in eine Datei mit der Endung .bat oder .cmd kopieren und speichern.
Zum Test empfiehlt sich der Aufruf aus einem geöffneten CMD Fenster oder der Einbau von einem Pause Befehl zwischen Zeile 07 und 08.
Zur Erläuterung:
Zeile 6 übergibt alle gefundenen Dateien an die Subroutine :proc.
In proc wird :
- der Zielpfad gebildet (12) und
- geprüft ob er existiert - wenn nicht wird er eingerichtet (13)
- geprüft ob eine Datei des Namens existiert, wenn ja die Subroutine VersionInc aufgerufen.
wenn nicht der move ausgeführt.
In VersionInc wird
- der Dateiname von der ggfs vorhanden Nr separiert und die Nr erhöht.
- wenn der neue Name schon da ist, ruft die Subroutine sich mit diesem neuen Namen selbst (rekursiv) auf.
- die Datei mit der neuen Nr umbenannt.
Gruß
LotPings
habe es nochmal auf einem anderen PC getestet, es geht.
Du mußt den kompletten Text in eine Datei mit der Endung .bat oder .cmd kopieren und speichern.
Zum Test empfiehlt sich der Aufruf aus einem geöffneten CMD Fenster oder der Einbau von einem Pause Befehl zwischen Zeile 07 und 08.
Zur Erläuterung:
Zeile 6 übergibt alle gefundenen Dateien an die Subroutine :proc.
In proc wird :
- der Zielpfad gebildet (12) und
- geprüft ob er existiert - wenn nicht wird er eingerichtet (13)
- geprüft ob eine Datei des Namens existiert, wenn ja die Subroutine VersionInc aufgerufen.
wenn nicht der move ausgeführt.
In VersionInc wird
- der Dateiname von der ggfs vorhanden Nr separiert und die Nr erhöht.
- wenn der neue Name schon da ist, ruft die Subroutine sich mit diesem neuen Namen selbst (rekursiv) auf.
- die Datei mit der neuen Nr umbenannt.
Gruß
LotPings
Hallo Jo,
kopieren heißt nicht selber engeben,
dabei passieren nämlich schon mal Buchstabendreher/Fehler wie du einiege eingebaut hast.
Zeile 12 SrcFld nicht ScrFld
Zeile 23 fehlt das Gleichheitszeichen.
Zeile 29 fehlt ein % vor NewName.
Außerdem wird der von dir gepostete Code besser lesbar wenn du die Tags we in der Formatierungshilfe angegeben verwendest.
Gruß
LotPings
kopieren heißt nicht selber engeben,
dabei passieren nämlich schon mal Buchstabendreher/Fehler wie du einiege eingebaut hast.
Zeile 12 SrcFld nicht ScrFld
Zeile 23 fehlt das Gleichheitszeichen.
Zeile 29 fehlt ein % vor NewName.
Außerdem wird der von dir gepostete Code besser lesbar wenn du die Tags we in der Formatierungshilfe angegeben verwendest.
Gruß
LotPings