Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batch-Datei Dateien umbenennen und verschieben

Frage Entwicklung Batch & Shell

Mitglied: maijinace

maijinace (Level 1) - Jetzt verbinden

17.05.2013 um 13:24 Uhr, 3602 Aufrufe, 5 Kommentare, 1 Danke

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!
Mitglied: bastla
17.05.2013 um 15:53 Uhr
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
01.
for %%d in ("U:\_Temp\021_FRK\RTD\6000096770007EUR\201?????_cremul.dat") do ( 
02.
    for /f "delims=_" %%v in ("%%~nd") do echo move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB010_%%v" 
03.
)
Zu Deinen 17 Ordnern: Wenn das die einzigen Ordner sind, deren Name mit "60000" beginnt, könntest Du auch dafür eine Schleife verwenden:
01.
for /d %%o in ("U:\_Temp\021_FRK\RTD\60000*") do ( 
02.
    for %%d in ("%%d\201?????_cremul.dat") do ( 
03.
        for /f "delims=_" %%v in ("%%~nd") do echo move "%%d" "U:\_Temp\021_FRK\RTD\RTD_PSK_GB010_%%v" 
04.
05.
)
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
Bitte warten ..
Mitglied: Endoro
17.05.2013 um 21:43 Uhr
Hallo maijinace,

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

Gruss!
Bitte warten ..
Mitglied: bastla
17.05.2013, aktualisiert um 22:17 Uhr
@ Endoro
Um den letzten Werktag (also Mo - Fr) zu erhalten würde auch ein kleines VBScript (verpackt in einen Batch) genügen:
01.
@echo off & setlocal 
02.
set "Datum=%date%" 
03.
:: Zum Testen kann auch ein konkretes Datum eingesetzt werden: 
04.
:: set "Datum=20.05.2013" 
05.
 
06.
set "LWT=%temp%\LetzterWerktag.vbs" 
07.
>"%LWT%" echo D=DateValue(WScript.Arguments(0))-1:W=Weekday(D,7):WScript.Echo D+(W^<3)*W 
08.
for /f %%i in ('cscript //nologo "%LWT%" %Datum%') do set "LD=%%i" 
09.
echo %Datum% --^> %LD%
Grüße
bastla
Bitte warten ..
Mitglied: maijinace
21.05.2013 um 07:38 Uhr
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 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

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
Bitte warten ..
Mitglied: bastla
21.05.2013 um 09:43 Uhr
Hallo maijinace!

Mit der Schleife hast Du natürlich recht - ich hatte zu oberflächlich gelesen 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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...