maijinace
Goto Top

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 face-sad

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!

Content-Key: 206639

Url: https://administrator.de/contentid/206639

Ausgedruckt am: 29.03.2024 um 13:03 Uhr

Mitglied: bastla
bastla 17.05.2013 um 15:53:37 Uhr
Goto Top
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
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"  
)
Zu Deinen 17 Ordnern: Wenn das die einzigen Ordner sind, deren Name mit "60000" beginnt, könntest Du auch dafür eine Schleife verwenden:
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"  
    )
)
Bei beiden Ansätzen ist übrigens ein "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
Mitglied: Endoro
Endoro 17.05.2013 um 21:43:57 Uhr
Goto Top
Hallo maijinace,

zum Raussuchen von normalen Werktagen kannst du cal verwenden. Aber ein CLI mit den Feiertagen hab ich auch noch nicht gesehen.

Gruss!
Mitglied: bastla
bastla 17.05.2013 aktualisiert um 22:17:23 Uhr
Goto Top
@ Endoro
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%
Grüße
bastla
Mitglied: maijinace
maijinace 21.05.2013 um 07:38:42 Uhr
Goto Top
Lieber bastla,

vielen Dank für deine Hilfe die 1. Variante hat super geklappt. Zur 2. Variante: Ich kann leider keine Schleife einfügen weil die Dateien im übergeordneten Ordner sonst alle gleich heißen würden face-smile und sie sollen alle anders heißen. Die Dateien kommen täglich mit dem Datum vom letzten Werktag. Ich weiß wie man mit Batch den heutigen Tag einfügt aber nicht den von letzten Werktag, und manchmal gibt es Tage, wo wir arbeiten und die Banken nicht deswegen musste ich es immer manuell eingeben. Aber mit deiner Variante kopiert er einfach den Text face-smile

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?

Dein Script für mich sieht jetzt so aus:

for %%d in ("U:\_Temp\021_FRK\RTD\6000096770007EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB010_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771714EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB171_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771721EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB172_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771738EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB173_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771745EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB174_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771752EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB175_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771769EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB176_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771776EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB177_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771783EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB178_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771790EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB179_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771800EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB180_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771817EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB181_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096771824EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB182_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096778023EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB202_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096778030EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB203_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096778119EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB811_%%v")
for %%d in ("U:\_Temp\021_FRK\RTD\6000096778418EUR\201?????_cremul.dat") do (for /f "delims=_" %%v in ("%%~nd") do move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB841_%%v")

Danke an endoro für das Antworten.

lg maijinace
Mitglied: bastla
bastla 21.05.2013 um 09:43:32 Uhr
Goto Top
Hallo maijinace!

Mit der Schleife hast Du natürlich recht - ich hatte zu oberflächlich gelesen face-sad und nicht darauf geachtet, dass ja aus zB
6000096770007EUR
dann
RTD_PSK_GB010
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 ...
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