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

Batch Aktualisierung von Dateinamen

Frage Entwicklung Batch & Shell

Mitglied: 68023

68023 (Level 1)

31.07.2008, aktualisiert 01.08.2008, 3762 Aufrufe, 6 Kommentare

Hallo,

ich bedanke mich vorab für Tips zu folgendem Problem:

In einem Verzeichnis befinden sich Dateien wie [bezeichnung]_[jahr]_[monat].[dateiendung]

Meine Aufgabe ist es, die beiden Datumsangaben Jahr und Monat aktuell zu halten.

Ich bin leider nicht so trittsicher in Batch-Dateien. Alles was ich zu Stande bekommen habe ist,
dass nach einem festen Dateinamen gesucht wird und dieser um das Datum ergänzt wird:

01.
@echo off 
02.
set Jahr=%date:~-4%  
03.
set Monat=%date:~-7,2%  
04.
ren data.xls "data_%Jahr%_%Monat.xls" 
05.
pause
Wie könnte ich
1) zunächst alle Dateinamen IN EINEM VERZEICHNIS nach "2008" durchsuchen
2) bei diesen Dateien den aktuellen Monat nicht anhängen sondern aktualisieren

Vielen lieben Dank
Nico
Mitglied: bastla
31.07.2008 um 14:53 Uhr
Hallo prinzipal87 und willkommen im Forum!

Wie sehr kann man/frau sich darauf verlassen, dass alle Dateinamen aus den genannten Teilen, getrennt durch "_", bestehen? Wenn das gesichert wäre, müsste eigentlich
01.
@echo off & setlocal 
02.
set "Muster=*_2008_*.*" 
03.
set "Verz=D:\EIN VERZEICHNIS" 
04.
 
05.
set Jahr=%date:~-4% 
06.
set Monat=%date:~-7,2% 
07.
 
08.
for %%i in ("%Verz%\%Muster%") do for /f "delims=_" %%a in ("%%~ni") do ren "%%i" "%%a_%Jahr%_%Monat%%%~xi"
genügen.

Grüße
bastla
Bitte warten ..
Mitglied: 68023
31.07.2008 um 15:35 Uhr
Hallo bastla,

herzlichen Dank für die Willkommensgrüße und deine Hilfe.

Ich versuche deine Code genau nachzuvollziehen, steige aber nicht hinter die 2. FOR-Schleife sowie die REN-Zeile. Ob du dazu kurz ein Sätzchen schreiben würdest?

Problem jetzt:
Das Skript aktuallisiert das Datum nicht, Dateinamen bleiben unverändert... Was mache ich falsch?

01.
@echo off & setlocal 
02.
cls 
03.
 
04.
echo Alle Berichte werden mit dem aktuellen Monat versehen! 
05.
echo Sollen wirklich alle Dateinamen bearbeitet werden? 
06.
 
07.
set choice= 
08.
set /p choice=j/n  
09.
 
10.
if "%choice%" == "j" goto rename 
11.
if "%choice%" == "n" goto END 
12.
 
13.
:rename 
14.
echo Dateinamen werden aktualisiert... 
15.
set "Muster"=*_2008_*.*" 
16.
set "Verzeichnis"=T:\Neuer Ordner" 
17.
 
18.
set Jahr=%date:~-4%  
19.
set Monat=%date:~-7,2%  
20.
 
21.
for %%i in ("%Verzeichnis%\%Muster%") do  
22.
for /f "delims=_" %%a in ("%%~ni") do 
23.
ren "%%i" "%%a_%Jahr%_%Monat%%%~xi" 
24.
echo %i% Dateien geändert  
25.
 
26.
 
27.
:END 
28.
echo Zum Beenden beliebige Taste! 
29.
pause > NUL
Wenn ich nun n Eingebe und bestätige springt er brav zu :END.
Gebe ich j ein, passiert nichts und die Konsole schließt sich...
Was ist falsch hier?

Als kleines Addon hätte ich gerne eine Ausgabe die mir die Anzahl der geänderten Daten anzeigt. So wie ich es mir gedacht habe scheint es nicht zu funktionieren, gell?

Vielen vielen Dank!
Nico
Bitte warten ..
Mitglied: bastla
31.07.2008 um 16:00 Uhr
Hallo prinzipal87!

Ich versuche deine Code genau nachzuvollziehen
Der Versuch hat leider schon bei Deiner Zeile 15 geendet, wo, so wie auch in Zeile 16, ein überzähliges Anführungszeichen unmittelbar vor dem "=" steht.

Die Zeilen 21 bis 23 dürfen nicht aufgeteilt werden, sondern müssen (wie in meiner Zeile 8) nur durch Leerzeichen getrennt in der selben Zeile stehen.

Für Dein Add-On fehlt noch der eigentliche Zähler.

Noch eine Anmerkung zur Sicherheitsabfrage: Nur wenn "n" (klein geschrieben, nur ein Zeichen) eingegeben wird, erfolgt tatsächlich der Sprung zu ":END" - sicherer wäre etwa:
01.
set /p choice=j/n 
02.
if /i "%choice%" neq "j" goto :END
Damit würde die Bearbeitung nur bei Eingabe von "j" oder (wegen "/i") "J" erfolgen.
... steige aber nicht hinter die 2. FOR-Schleife sowie die REN-Zeile.
Mit der zweiten "for"-Schleife wird der Dateiname lt erster Schleife (%%~ni) - siehe dazu am Ende von "for /?" - anhand des Trennzeichens "_" einzelne Teile ("tokens") zerlegt. Da nur der erste Teil interessiert, kann die Angabe von "tokens=1" unterbleiben. Dieser erste Teil steht dann in %%a und wird im "ren"-Befehl verwendet.

Beim Umbenennen muss zunächst die Datei (samt Pfad) angegeben werden - %%i - und danach nur der neue Name + Typ. Dieser neue Namen setzt sich zusammen aus: erster Teil des alten Namens (bis zum ersten "_") - %%a - den Trennzeichen "_" und Jahr und Monat. Da der Dateityp gleich bleiben soll, wird dieser mit "%%~xi" dem Dateipfad in %%i entnommen (inkl "." vor dem Typ).

[Edit] Zusammen mit der Ermittlung der Anzahl wäre der relevante Teil (ab Zeile 21) dann:
01.
set /a Anzahl=0 
02.
for %%i in ("%Verzeichnis%\%Muster%") do for /f "delims=_" %%a in ("%%~ni") do ren "%%i" "%%a_%Jahr%_%Monat%%%~xi" && set /a Anzahl+=1 
03.
echo %Anzahl% Dateien geändert 
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: 68023
31.07.2008 um 16:25 Uhr
Hallo,

gutert Hinweis mit zu der Abfrage, danke schön.

Letzter Durchgang, sorry:

01.
@echo off & setlocal 
02.
cls 
03.
 
04.
echo Alle Berichte werden mit dem aktuellen Monat versehen! 
05.
echo Sollen wirklich alle Dateinamen bearbeitet werden? 
06.
 
07.
set choice= 
08.
set /p choice=j/n  
09.
if /i "%choice%" neq "j" goto :END 
10.
 
11.
:rename 
12.
echo Dateinamen werden aktualisiert... 
13.
set "Muster=*_2008_*.xls" 
14.
set "Verzeichnis=T:\DCAA-TV intern\Krüger\Makowski\Neuer Ordner" 
15.
 
16.
set Jahr=%date:~-4%  
17.
set Monat=%date:~-7,2%  
18.
 
19.
for %%i in ("%Verzeichnis%\%Muster%") do for /f "delims=_" %%a in ("%%~ni") do ren "%%i" "%%a_%Jahr%_%Monat%%%~xi"  
20.
 
21.
:END 
22.
echo Zum Beenden beliebige Taste! 
23.
pause > NUL
Script läuft fehlerfrei durch, aber die Dateinamen ändern sich nicht... Wieder ein Tipfehler?

Nico
Bitte warten ..
Mitglied: bastla
31.07.2008 um 16:46 Uhr
Hallo prinzipal87!

Wieder ein Tipfehler?
Eher ein Umlaute-Problem (durch "Krüger" im Pfad) - wenn Du an den Anfang des Batches ein "chcp 1252" setzt, wird auch in CMD ANSI anstatt ASCII verwendet.

Grüße
bastla
Bitte warten ..
Mitglied: 68023
01.08.2008 um 14:11 Uhr
Hallo bastla,

genial!
Danke schön!!!

Nico
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...