Batch-Datei Dateien umbenennen und verschieben
Hallo Liebe Leute, habe eine bitte an euch ich suche mich schon seit Stunden dumm und dämlich und finde keine lösung. Leider bin ich im Bereich "Batch-Scripte" schreiben nicht besonders gut, aber bis jetzt habe ich mir immer zu helfen gewusst nun bin ich beim optimieren meiner alten Batchdateien gewesen, aber ich komme mit diesen befehlen die es gibt nicht klar weil sie mir nicht viel weiterhelfen ohne Bedeutung
Hier mein Fall ich habe Mehrere Ordner (max. 17) jeden Tag kommen pro Ordner eine Datei rein, diese müssen umbenannt werden und in den übergeordneten Ordner verschon werden.
Die Dateien schauen so aus das vom letzten Werktag das Datumdrauf ist und dann"_cremul.dat" angehängt ist zB: 20130516_cremul.dat
Dies soll aber künftig RTD_PSK_GS010_20130516 heißen. Ich habe das sehr einfach gelöst, aber es ist eine Interaktion vom Enduser (=ich) nötig.
Siehe mein Script unten. Ich will dass wenn ich den BatchDatei starte das es automatisch macht ohne das ich den letzten Werktag eintippen muss. Ich habe es schon mit Codes wie diesen hier versucht, leider vergebens: for %%f in (*_*.dat) do @for /f %%n in ("%%~nf") do ren "%%~f" "%%n%%~xf" Da ich auch den sinn nicht verstehe kann ich nicht nach Fehlern suchen.
habt ihr für mich Vorschläge? Danke jetzt schon mal für die Hilfen! Melde mich am Dienstag wieder.
REM ------------------------------------------------------------
ECHO Datum vom letzten Werktag (JJJJMMTT) eingeben und weiter mit Enter
set SORTDATE=%date:~-4%%date:~3,2%%date:~0,2%
ECHO Heute ist der %SORTDATE%
ECHO.
set /P x=
move "U:\_Temp\021_FRK\RTD\6000096770007EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB010_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771714EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB171_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771721EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB172_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771738EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB173_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771745EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB174_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771752EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB175_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771769EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB176_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771776EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB177_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771783EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB178_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771790EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB179_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771800EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB180_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771817EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB181_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771824EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB182_%X%"
move "U:\_Temp\021_FRK\RTD\6000096778023EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB202_%X%"
move "U:\_Temp\021_FRK\RTD\6000096778030EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB203_%X%"
move "U:\_Temp\021_FRK\RTD\6000096778119EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB811_%X%"
move "U:\_Temp\021_FRK\RTD\6000096778418EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB841_%X%"
ECHO.
ECHO Die Dateien wurden umbenannt und verschoben! Leere Ordner muessen nicht geloescht werden!
Hier mein Fall ich habe Mehrere Ordner (max. 17) jeden Tag kommen pro Ordner eine Datei rein, diese müssen umbenannt werden und in den übergeordneten Ordner verschon werden.
Die Dateien schauen so aus das vom letzten Werktag das Datumdrauf ist und dann"_cremul.dat" angehängt ist zB: 20130516_cremul.dat
Dies soll aber künftig RTD_PSK_GS010_20130516 heißen. Ich habe das sehr einfach gelöst, aber es ist eine Interaktion vom Enduser (=ich) nötig.
Siehe mein Script unten. Ich will dass wenn ich den BatchDatei starte das es automatisch macht ohne das ich den letzten Werktag eintippen muss. Ich habe es schon mit Codes wie diesen hier versucht, leider vergebens: for %%f in (*_*.dat) do @for /f %%n in ("%%~nf") do ren "%%~f" "%%n%%~xf" Da ich auch den sinn nicht verstehe kann ich nicht nach Fehlern suchen.
habt ihr für mich Vorschläge? Danke jetzt schon mal für die Hilfen! Melde mich am Dienstag wieder.
REM ------------------------------------------------------------
ECHO Datum vom letzten Werktag (JJJJMMTT) eingeben und weiter mit Enter
set SORTDATE=%date:~-4%%date:~3,2%%date:~0,2%
ECHO Heute ist der %SORTDATE%
ECHO.
set /P x=
move "U:\_Temp\021_FRK\RTD\6000096770007EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB010_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771714EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB171_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771721EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB172_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771738EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB173_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771745EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB174_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771752EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB175_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771769EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB176_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771776EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB177_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771783EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB178_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771790EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB179_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771800EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB180_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771817EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB181_%X%"
move "U:\_Temp\021_FRK\RTD\6000096771824EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB182_%X%"
move "U:\_Temp\021_FRK\RTD\6000096778023EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB202_%X%"
move "U:\_Temp\021_FRK\RTD\6000096778030EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB203_%X%"
move "U:\_Temp\021_FRK\RTD\6000096778119EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB811_%X%"
move "U:\_Temp\021_FRK\RTD\6000096778418EUR\201?????_cremul.dat" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB841_%X%"
ECHO.
ECHO Die Dateien wurden umbenannt und verschoben! Leere Ordner muessen nicht geloescht werden!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 206639
Url: https://administrator.de/contentid/206639
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo maijinace und willkommen im Forum!
Wozu musst Du denn das Datum des letzten Werktages wissen - befinden sich auch "*_cremul.dat"-Dateien von anderen Tagen im Ordner? Wenn nein, könnten doch einfach alle entsprechenden Dateien verschoben und umbenannt werden, also etwa
Zu Deinen 17 Ordnern: Wenn das die einzigen Ordner sind, deren Name mit "60000" beginnt, könntest Du auch dafür eine Schleife verwenden:
Bei beiden Ansätzen ist übrigens ein "
Sollten sich tatsächlich neben den Dateien des letzten Werktages auch zB Dateien von heute befinden, könntest Du letztere ausfiltern - das wäre einfacher, als per Batch (oder Script) das Datum des letzten Werktages zu ermitteln (Stichwort "Feiertage") ...
Grüße
bastla
Wozu musst Du denn das Datum des letzten Werktages wissen - befinden sich auch "*_cremul.dat"-Dateien von anderen Tagen im Ordner? Wenn nein, könnten doch einfach alle entsprechenden Dateien verschoben und umbenannt werden, also etwa
for %%d in ("U:\_Temp\021_FRK\RTD\6000096770007EUR\201?????_cremul.dat") do (
for /f "delims=_" %%v in ("%%~nd") do echo move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB010_%%v"
)
for /d %%o in ("U:\_Temp\021_FRK\RTD\60000*") do (
for %%d in ("%%d\201?????_cremul.dat") do (
for /f "delims=_" %%v in ("%%~nd") do echo move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB010_%%v"
)
)
echo
" vor dem "move
" als Sicherung eingebaut - dadurch werden die Verschiebebefehle nur angezeigt, aber nicht ausgeführt ...Sollten sich tatsächlich neben den Dateien des letzten Werktages auch zB Dateien von heute befinden, könntest Du letztere ausfiltern - das wäre einfacher, als per Batch (oder Script) das Datum des letzten Werktages zu ermitteln (Stichwort "Feiertage") ...
Grüße
bastla
Hallo maijinace,
zum Raussuchen von normalen Werktagen kannst du cal verwenden. Aber ein CLI mit den Feiertagen hab ich auch noch nicht gesehen.
Gruss!
zum Raussuchen von normalen Werktagen kannst du cal verwenden. Aber ein CLI mit den Feiertagen hab ich auch noch nicht gesehen.
Gruss!
@ Endoro
Um den letzten Werktag (also Mo - Fr) zu erhalten würde auch ein kleines VBScript (verpackt in einen Batch) genügen:
Grüße
bastla
Um den letzten Werktag (also Mo - Fr) zu erhalten würde auch ein kleines VBScript (verpackt in einen Batch) genügen:
@echo off & setlocal
set "Datum=%date%"
:: Zum Testen kann auch ein konkretes Datum eingesetzt werden:
:: set "Datum=20.05.2013"
set "LWT=%temp%\LetzterWerktag.vbs"
>"%LWT%" echo D=DateValue(WScript.Arguments(0))-1:W=Weekday(D,7):WScript.Echo D+(W^<3)*W
for /f %%i in ('cscript //nologo "%LWT%" %Datum%') do set "LD=%%i"
echo %Datum% --^> %LD%
bastla
Hallo maijinace!
Mit der Schleife hast Du natürlich recht - ich hatte zu oberflächlich gelesen und nicht darauf geachtet, dass ja aus zB
dann
werden muss (es also keinen zu übernehmenden Bestandteil im Namen des Ordners gibt) - ließe sich zwar mit einer Zuordnungsliste lösen, aber wenn das Verschieben die einzige Aktion ist, um die es geht, würde die Liste mehr Aufwand bedeuten als Deine jetzige Version ...
Grüße
bastla
Mit der Schleife hast Du natürlich recht - ich hatte zu oberflächlich gelesen und nicht darauf geachtet, dass ja aus zB
6000096770007EUR
RTD_PSK_GB010
Wenn ich mich nicht irre müsste er auch falls es jemals dazu kommen sollte das 2 Dateien von 2 Tagen drinnen sind beide gleichzeitig und richtig umbenennen oder?
Wenn es kein Problem ist, dass die beiden Dateien am gleichen Tag verschoben werden, also nicht zB die aktuelle(re) Datei noch im Ordner bleiben muss, sollte das klappen, da sich ja die Namen auch nach dem Verschieben noch durch das Datum unterscheiden.Grüße
bastla