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
GELÖST

Mehrere Dateien nach bestimmtem Muster umbenennen

Frage Entwicklung Batch & Shell

Mitglied: martinstein

martinstein (Level 1) - Jetzt verbinden

01.08.2010, aktualisiert 15:56 Uhr, 5499 Aufrufe, 7 Kommentare, 2 Danke

Hallo zusammen,

kurz vorab: Ja, ich habe die Suche benutzt, verschiedene Sachen gefunden und ausprobiert. Und nein, es hat nicht geklappt, dafür kenn ich mich mit der Materie leider nicht gut genug aus.

Ich habe einen Ordner voll mit Dateien mit den Endungen .txt und .dat. Jeweils eine .txt-Datei und eine .dat-Datei gehören paarweise zusammen und haben außer der Endung den exakt gleichen Namen. Der Namensaufbau ist immer so: Protokoll_20100801-151901-203.txt bzw. Protokoll_20100801-151901-203.dat

Folgende Probleme versuche ich nun per Batch zu lösen:

1. Der Unterstrich soll durch ein Leerzeichen ersetzt werden
2. Das letzte Minus und die dreistellige Zahl dahinder sollen entfernt werden
3. Die restlichen Minus-Zeichen sollen durch Leerzeichen ersetzt werden
4. Die erste lange Zahl (im Beispiel 20100801) ist ein Datum und soll so von Minus-Zeichen unterbrochen werden, dass es 2010-08-01 heißt
5. Die zweite lange Zahl (im Beispiel 151901) ist eine Uhrzeit und soll so von Minus-Zeichen unterbrochen werden, dass es 15-19-01 heißt

Jeder Wink in die richtige Richtung ist willkommen.

Vielen Dank im Voraus für eure Hilfe und viele Grüße

Martin
Mitglied: LotPings
01.08.2010 um 16:17 Uhr
Hallo Martin,

so schwer ist das doch mit einer (oder auch zwei) for-schelifen nicht.
Von tokens und delims hast du ja bestimmt auch schon gelesen, damit das Aufsplitten von Datum/Zeit einfacher geht kommt noch eine Subroutine dazu.

Was has du denn schon an Code vorliegen ?

Gruß
LotPings
Bitte warten ..
Mitglied: bastla
01.08.2010 um 16:29 Uhr
Hallo martinstein!

Das könnte etwa so gehen:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Der wo voll mit Dateien ist" 
03.
set "Dateien=*_*-*-*.txt *_*-*-*.dat" 
04.
 
05.
pushd "%Ordner%" 
06.
for /f %%i in ('dir /b /a-d %Dateien% 2^>nul') do for /f "tokens=1-3 delims=_-" %%a in ("%%i") do ( 
07.
    set "Datum=%%b" 
08.
    set "Zeit=%%c" 
09.
    call :ProcessFile "%%i" "%%a" 
10.
11.
popd 
12.
goto :eof 
13.
 
14.
:ProcessFile 
15.
echo ren %1 "%~2 %Datum:~,4%-%Datum:~4,2%-%Datum:~6,2% %Zeit:~,2%-%Zeit:~2,2%-%Zeit:~4,2%%~x1" 
16.
goto :eof
Für die Testphase steht vor dem Befehl zum Umbenennen (Zeile 15) noch ein "echo" - damit wird nur angezeigt, was passieren würde, wenn Du das "echo" entfernst.

Da wir gerade "Code-Qualitäts-Wochen" haben , eine kurze Erläuterung des Ablaufes:

Nach dem Wechseln in den Ordner mit den vielen Dateien wird in der ersten "for"-Schleife nach allen zum Dateimuster (den Dateimustern) passenden Dateien gesucht.
Für jede der gefundenen Dateien erfolgt eine Zerlegung des Dateinamens anhand der Trennzeichen "_" und "-", wobei nur die ersten 3 Bestandteile ("tokens") verwendet werden. %%a enthält den Teil vor dem "_" und kann daher unverändert bleiben, in %%b und %%c stehen Datum und Uhrzeit - damit diese in weiterer Folge zerlegt werden können, werden sie Variablen zugewiesen.
Der komplette Dateiname (%%i) und der Teil %%a werden nun als Parameter an das die eigentliche Arbeit leistende Unterprogramm ":ProcessFile" übergeben (die Variablen %Datum% und %Zeit% stehen dort auch zur Verfügung).

In besagtem Unterprogramm wird für die Umbenennung der neue Name stückweise zusammengefügt:
%%a wurde als zweiter Parameter übergeben und kommt daher als %2 an - da er bei der Übergabe vorsichtshalber (falls dieser Bestandteil Leerzeichen enthielte) unter Anführungszeichen gesetzt wurde, müssen diese nun wieder entfernt werden - Schreibweise daher: %~2
Aus der Variable %Datum% werden einzeln Jahr (erste 4 Stellen), Monat (4 Stellen überspringen, dann 2 Stellen) und Tag (6 Stellen überspringen, dann 2 Stellen) extrahiert und, durch "-" verbunden, in den neuen Namen eingebaut.
Die Zerlegung und Neu-Zusammensetzung der Uhrzeit erfolgt auf die gleiche Weise.
Schließlich wird noch der "Original"-Datentyp (aus dem kompletten Dateinamen = Parameter 1 = %1 mit %~x1" entnommen) hinzugefügt.

Grüße
bastla

[Edit] Fehlendes %-Zeichen ergänzt (von wegen "Code-Qualität" ) [/Edit]
Bitte warten ..
Mitglied: martinstein
01.08.2010 um 16:53 Uhr
Hallo,

vielen, vielen Dank! bastlas Lösung macht zwar zunächst GENAU was sie soll, aber wenn's an das Anhängen der Dateiendung geht, verpasst das Script den .txt-Dateien die Endung ~x1 (ohne Punkt) und will dann offenbar den .dat-Dateien auch die Endung ~x1 verpassen, streikt ab da aber komplett! Sieht jemand das letzte Puzzlestück?

Viele Grüße

Martin

P.S. LotPings, ich hatte was mit tokens und delims probiert, bin aber grandios gescheitert...
Bitte warten ..
Mitglied: LotPings
01.08.2010 um 17:11 Uhr
Zitat von martinstein:
Hallo,

vielen, vielen Dank! bastlas Lösung macht zwar zunächst GENAU was sie soll, aber wenn's an das Anhängen der
Dateiendung geht, verpasst das Script den .txt-Dateien die Endung ~x1 (ohne Punkt) und will dann offenbar den .dat-Dateien auch
die Endung ~x1 verpassen, streikt ab da aber komplett! Sieht jemand das letzte Puzzlestück?
Das eine %-Zeichen vor ~x1 musst du nur verdoppeln

P.S. LotPings, ich hatte was mit tokens und delims probiert, bin aber grandios gescheitert...
Nunja bastla hat dir das, was ich Kopf hatte, schon vorzeitg verraten - mein didaktischer Versuch wurde torpediert
Ansonsten natürlich ein vorbildlich kommentierter Batch.

Gruß
LotPings
Bitte warten ..
Mitglied: bastla
01.08.2010 um 18:58 Uhr
@LotPings
Sorry wegen des Torpedos (den hatte ich schon auf die Reise geschickt, bevor ich Deinen Kommentar gesehen hatte), und danke für's Aushelfen ...

... wobei genau genommen das %-Zeichen nicht verdoppelt, sondern das fehlende %-Zeichen (am Ende von "%Zeit:~4,2%" oder eben für "%~x1") ergänzt werden muss (hatte ich leider beim Posten verschlimmbessert, korrigiere das aber - der Ordnung halber - auch oben noch) ...

Grüße
bastla
Bitte warten ..
Mitglied: martinstein
01.08.2010 um 22:09 Uhr
Nochmals vielen Dank - das hat geklappt. Das mit dem for hätte ich ja VIELLEICHT noch hinbekommen, aber spätestens bei dem ren wäre dann Ende gewesen :o(
Bitte warten ..
Mitglied: Biber
02.08.2010 um 09:45 Uhr
[OT]

Moin alle,

eine so klar formulierte Umbenenn-Frage und so sauber hergeleitete Lösungen habe ich schon mehrere Montage nicht vorgefunden hier.

Danke an euch alle drei.

Grüße
Biber
[/OT]
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 7
gelöst Mehrere Dateien in Windows umbenennen mit Batchjob (4)

Frage von Jeduja zum Thema Windows 7 ...

Linux Tools
CURL mehrere Dateien vom ftp-Server herunterladen (10)

Frage von highpriest zum Thema Linux Tools ...

Microsoft Office
gelöst Per VBA im Verzeichniss dateien mit Wildcard umbenennen (4)

Frage von usenussi zum Thema Microsoft Office ...

Microsoft Office
Excel VBA "SVERWEIS" über mehrere Dateien in Ordner (2)

Frage von Acht85 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

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

Frage von Floh21 zum Thema Outlook & Mail ...

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

Frage von Unwichtig zum Thema Netzwerkmanagement ...