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

Dateinamen per Batch ändern

Frage Entwicklung Batch & Shell

Mitglied: hboltz

hboltz (Level 1) - Jetzt verbinden

19.01.2009, aktualisiert 17:59 Uhr, 10343 Aufrufe, 11 Kommentare

Hallo,

ich bin Netzwerker und habe mit Programmierung nicht viel zu tun. Daher ist die Frage vermutlich auch total simpel, aber ich krieg's mit lesen der Beiträge nicht hin! Also, deshalb hier die Problematik:

Ich habe in einem Ordner hunderte Dateien, die folgende Namenskonvention haben:

001-diversenamen.pdf

Ich möchte jetzt in die Mitte des Dateinamens noch etwas einbauen, so daß die Files nachher wie folgt heißen:

001-200901-diversenamen.pdf

Ich weiß, dass es jede Menge Tools gibt, die das problemlos können, aber ich muss das immer wieder machen und das auch noch in verschiedenen Ordnern mit verschiedenen Konventionen, so dass Tools einfach zu aufwändig sind.

Vielen Dank für Eure Hilfe!

HoBo
Mitglied: bastla
19.01.2009 um 18:16 Uhr
Hallo hboltz und willkommen im Forum!

Sollte sich von der Kommandozeile so machen lassen:
for /f "tokens=1* delims=-" %i in ('dir /b "D:\Daten\*-*.pdf"') do @echo ren "D:\Daten\%i-%j" "%i-200901-%j"
Das "@echo" dient dazu, die Umbenennungen zuerst nur anzeigen zu lassen - wenn alles OK aussieht, die gleiche Zeile ohne "@echo" verwenden, um tatsächlich die Namen zu ändern.

Falls Du das in einen Batch verwandeln willst, jeweils %%i und %%j anstatt %i und %j verwenden.

Grüße
bastla
Bitte warten ..
Mitglied: 60730
19.01.2009 um 18:16 Uhr
Servus und willkommen,

zu deiner Frage:

Ich möchte jetzt in die Mitte des Dateinamens noch etwas einbauen, so daß die Files nachher wie folgt heißen:
001-diversenamen.pdf
001-200901-diversenamen.pdf

Mit anderen Worten:

  • die "MItte" ist das 4. Zeichen, oder das Zeichen nach dem Bindestrich?
  • Der Schnippsel, der eingefügt werden soll, ist ein Datum?
  • "Das" Datum von heute?
  • "Das" Datum der Datei?

Gruß
edit... ohne Worte - fast fasta bastla /edit
Bitte warten ..
Mitglied: hboltz
19.01.2009 um 18:35 Uhr
funktioniert auf der Kommandozeile - wie sähe nun der Batchfile aus, wenn ich den schon im entsprechenden Verzeichnis ausführen würde? Danke !!!
Bitte warten ..
Mitglied: hboltz
19.01.2009 um 18:36 Uhr
zu 1 - ja - hinter dem Bindestrich soll was rein
zu 2 - manchmal, aber nicht immer
zu 3+4 - siehe 2

Gruß
HoBo
Bitte warten ..
Mitglied: 60730
19.01.2009 um 18:39 Uhr
Servus again,

naja meine Fragen haben sich ja durch fasta Bastla schon quasi in Luft aufgelöst

Aber zu deiner Frage zurück, bastla hat es ja schon vorzelebriert:

Aus jedem % machst du %%
01.
for /f "tokens=1* delims=-" %%i in ('dir /b "D:\Daten\*-*.pdf"') do @echo ren "D:\Daten\%%i-%%j" "%%i-200901-%%j"
Bitte warten ..
Mitglied: bastla
19.01.2009 um 18:41 Uhr
Hallo hboltz!

Wie schon erwähnt - Unterschied eigentlich nur hinsichtlich %%i, %%j:
01.
@for /f "tokens=1* delims=-" %%i in ('dir /b "D:\Daten\*-*.pdf"') do @echo ren "D:\Daten\%%i-%%j" "%%i-200901-%%j"
Wenn Du den Batch in den entsprechenden Ordner legst, dann:
01.
@for /f "tokens=1* delims=-" %%i in ('dir /b *-*.pdf') do @echo ren "%%i-%%j" "%%i-200901-%%j"
Grüße
bastla
Bitte warten ..
Mitglied: bastla
19.01.2009 um 18:45 Uhr
@TimoBeil
Biber würde Dich jetzt Rechtsüberholer nennen ...

naja meine Fragen haben sich ja durch fasta Bastla schon quasi in Luft aufgelöst
Ganz im Gegentum; die Fragen waren durchaus gerechtfertigt (und hätte ich heute mehr Zeit, wären sie vermutlich so ähnlich auch von mir gekommen) - ich hatte einfach nur aus der Hüfte geschossen und zufällig getroffen ...

Grüße
bastla
Bitte warten ..
Mitglied: hboltz
19.01.2009 um 20:04 Uhr
PRIMA!!! Vielen Dank! Es funktioniert. Allerdings muss ich ehrlich zugeben, dass ich die Syntax nicht verstehe. Hast Du vielleicht einen Link für mich, wo ich die Parameter nachlesen kann und wo diese erklärt werden?

Danke noch mal und Gruß
HoBo
Bitte warten ..
Mitglied: bastla
19.01.2009 um 20:52 Uhr
Hallo hboltz!

Hast Du vielleicht einen Link für mich, wo ich die Parameter nachlesen kann und wo diese erklärt werden?
Einfach einmal "for /f" an der Kommandozeile eingeben und durch die Online-Hilfe "durchbeissen" (analog bei Bedarf "dir /?" ode "ren /?") ...

... ansonsten könnte ich die eine Zeile ja kurz zu erklären versuchen:
for /f "tokens=1* delims=-" %%i in ('dir /b *-*.pdf') do 
Zerlege die einzelnen Zeilen der "dir"-Ausgabe (durch "/b" werden ausschließlich die Namen der Dateien, die dem Schema "*-*.pdf" entsprechen, ausgegeben) anhand des Trennzeichens (= "delimiter") "-", wobei nur in den Teil vor dem ersten Trennzeichen ("1") und den gesamten Rest nach dem ersten Trennzeichen ("*") zerlegt werden soll (auch wenn noch weitere "-" enthalten wären, würde dort nicht mehr getrennt werden) und stelle die beiden Teile als %%i und %%j (= nächster Buchstabe im Alphabet ) zur Verfügung.

ren "%%i-%%j" "%%i-200901-%%j"
Dieser Teil wird für jede gefundene Datei durchgeführt.

Für das Umbenennen muss zunächst der alte Dateiname (grundsätzlich mit Pfad, aber hier nicht erforderlich, da der Batch schon im richtigen Ordner ausgeführt wird) angegeben werden. Dieser besteht aus dem Teil vor dem ersten "-", dem "-" und dem Rest dahinter - daher also "%%i-%%j". Die Anführungszeichen sind eigentlich nur erforderlich, wenn ein Pfad / Dateiname Leerzeichen enthält, aber da sie so gut wie nie stören, setze ich sie sicherheitshalber.

Der zweite Parameter des "ren"-Befehles ist der neue Dateiname (immer ohne Pfad). Dieser wird dann einfach aus den nötigen Teilen zusammengesetzt: %%i (Teil vor dem ersten "-" des ursprünglichen Namens), "-200901-" und "%%j" (Rest des alten Namens nach dem ersten "-").

Grüße
bastla
Bitte warten ..
Mitglied: hboltz
19.01.2009 um 23:24 Uhr
SUPER!!! Danke für die Info! Eine Frage bzw. ein Problem habe ich gerade noch festgestellt: wenn ich den Batch Job 2 mal starte, wird nochmals das Datum eingefügt. Kann man das irgendwie verhindern????

Danke und Gruß
HoBo
Bitte warten ..
Mitglied: bastla
20.01.2009 um 08:00 Uhr
Hallo hboltz!

Da sich ja vermutlich "200901" in "200902" bis "200912", aber wohl auch "201001" etc, weiter entwickeln wird, wäre ev nur ein Umbenennen von Dateien, deren zweiter Namensbestandteil nicht mit "20" beginnt, eine Möglichkeit - ob damit dann Dateien auf der Strecke blieben, weil deren (lt Deinem oben dargestellten Schema) "diversenamen.pdf"-Teil ohnehin bereits mit "20" anfängt, musst Du selbst abschätzen.
for /f "tokens=1* delims=-" %%i in ('dir /b *-*.pdf') do echo %%j|findstr /b "20">nul || ren "%%i-%%j" "%%i-200901-%%j"
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
gelöst Datum per batch ändern in Tagen (2)

Frage von crawnby zum Thema Batch & Shell ...

IDE & Editoren
gelöst IP und DNS per Batch ändern (9)

Frage von andyw5 zum Thema IDE & Editoren ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateinamen umschreiben batch (5)

Frage von jocheng zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (24)

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

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...