koeson8
Goto Top

Ordner nach 8-Stelligen Dateinamen durchsuchen und umbenennen

Liebes Forum!

Ich bin jetzt schon seit geraumer Zeit auf der Suche nach einer Lösung für folgendes Problem:

Batch-Datei die folgendes kann/macht:

1) Ordner nach 8-stelligen Dateinamen durchsuchen (sind immer *.pdf Dateien)
2) Wenn gefunden, dann unbenennen: §§§1§§ Dateiname §§§§§ Dateiname.Endung

@2) ...habe ich schon eine gute Lösung - Dank administrator.de (wobei statt § immer ein anders Zeichen gemacht wird)
@1) ...war der Plan, evt mit "dir" und 8 Fragezeichen oder Sternchen zu arbeiten, funktioniert leider nicht.

Für Ideen und Inputs wäre ich wircklich sehr dankbar!!!

Schönen 2. Weihnachtstag,

Koeson8

Ps.: so schauts im Moment bei mir aus:

For /F %%i in ('dir /B ????????.pdf') do (  
	goto Batch
	goto End
)

:Batch
	For /F %%i in ('dir /B ????????.pdf') do set Dateiname=%%i  
	for /f "delims=. tokens=1" %%i in ("%Dateiname%") do set Titel=%%i  
	for /f "delims=. tokens=2" %%i in ("%Dateiname%") do set Endung=%%i  
	ren "%Dateiname%" "§§§1§§%Titel%§§§§§%Titel%.%Endung%"  

:End

Pause

Content-Key: 225360

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

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: Pjordorf
Pjordorf 26.12.2013 um 15:34:42 Uhr
Goto Top
Hallo,

Zitat von @koeson8:
@1) ...war der Plan, evt mit "dir" und 8 Fragezeichen oder Sternchen zu arbeiten, funktioniert leider nicht.
Was funktioniert da nicht? Bitte genau deinen bei dir erzeugten Fehler(n) hier für uns nachvollziehbar reinstellen. Wir könenn zwar deine Fehler erahnen, aber unsere Kistallkuglen hängen noch am Weihnachtsbaum.

Und mit den Code tags wird es allen leichter deinen Code zu lesen. Formatierungen in den Beiträgen

Gruß,
Peter
Mitglied: koeson8
koeson8 26.12.2013 um 15:57:17 Uhr
Goto Top
Hallo Peter!

Danke für den Foramt-Tipp! Ich bin neu in diesem Forum und deshlab fur konstruktives Feedback immer zu haben!
Zu der Frage "was kunktioniert nicht":

Es gibt keine Fehlermeldung aus, sondern läuft durch. Das Problem ist, dass es nur die letzte Datei in meinem Testordner umbenennt. Wenn ich es nocheinmal durchlaufen lasse, die Vorletzte ....wenn ich dann die Batch-Datei so oft geöffnet habe, dass alle mal umbenannt wurden, fäng sie wieder von unten an und benennt die letzte §§1§§§Name§§§§§Name.pdf um...

Eigentlich würde ich gern alle 8-stelligen Dateinamen unter einmal umbenennen, und falls sie +/- als 8 Stellen haben sollen sie ignonriert werden.

Bei weiteren Fragen oder Unklarheiten gerne nocheinmal Fragen!

Wär ja ein Skandal wenn wir die Kristallkugeln vom Christbaum nehmen müssten! face-big-smile
Mitglied: Pjordorf
Pjordorf 26.12.2013 um 17:52:45 Uhr
Goto Top
Hallo,

Zitat von @koeson8:
Es gibt keine Fehlermeldung aus, sondern läuft durch
Du startest deine Batchdatei aber schon in einem sogenannten CMD Fenster/ DOS Fenster aus, oder? Und wenn es keinen Fehler ausgibt, wie kommst du dann da drauf das es einen Fehler macht bzw. erzeugt?

Das Problem ist, dass es nur die letzte Datei in meinem Testordner umbenennt.
Dann tut deine Batch es doch wie du erwarten solltest.

Wenn ich es nocheinmal durchlaufen lasse, die Vorletzte
Oder nicht doch wieder die letzte (nur eben noch nicht umbenannte) deiner ????????.pdf Dateien?

§§1§§§Name§§§§§Name.pdf um...
Was ergibt ein dir /B ????????.pdf bei deinem uns unbekannten OS? Ich gehe davon aus aus du dich im richtigen Ordner bewegst...Hier steht zwar das es dann genau Acht Zeichen sein sollten (und auch sind face-smile) mit der Endung .PDF aber, auch bei mir werden Dateien ausgespuckt mit weniger als 8 Zeichen sowie mit mehr als 8 Zeichen im Dateinamen. (Windows 7 Ult. SP1 64 Bit)
E:\>dir ????????.txt
 Datenträger in Laufwerk E: ist Data
 Volumeseriennummer: EE85-A833

 Verzeichnis von E:\

24.05.2011  19:58               412 Neues Textdokument.txt
18.05.2013  12:19               682 WLANs uebertragen.txt
               2 Datei(en),          1.094 Bytes
               0 Verzeichnis(se), 39.304.200.192 Bytes frei

Ein Dir /X ????????.txt liefert des Rätsels Lösung
E:\>dir /X ????????.txt
 Datenträger in Laufwerk E: ist Data
 Volumeseriennummer: EE85-A833

 Verzeichnis von E:\

24.05.2011  19:58               412 NEUEST~1.TXT Neues Textdokument.txt
18.05.2013  12:19               682 WLANSU~1.TXT WLANs uebertragen.txt
               2 Datei(en),          1.094 Bytes
               0 Verzeichnis(se), 39.304.200.192 Bytes frei

Aha, der Lange dateiname sowie der Kurze (8.3) dateiname werden beim DIr berücksichtigit...

Eigentlich würde ich gern alle 8-stelligen Dateinamen unter einmal umbenennen, und falls sie +/- als 8 Stellen haben sollen sie ignonriert werden.
Hmmm. Trivial, hört sich so an, aber dann kommen noch die redmonder Praktikantinen ins Spiel (wie einige hier zu sagen Pflegen).
http://stackoverflow.com/questions/11972572/how-can-i-delete-files-with ...

Gruß,
Peter
Mitglied: bastla
bastla 26.12.2013 aktualisiert um 23:25:08 Uhr
Goto Top
Hallo koeson8 und willkommen im Forum!

Wenn zumindest einmal die Umbenennung richtig erfolgt, könnte das, basiend auf Deinem Code und ungetestet, etwa so gehen:
For /F %%i in ('dir /B ????????.pdf') do ren "%%i" "§§§1§§%%~ni§§§§§%%i"
Näheres dazu unter "for /?" (ziemlich gegen Ende der Ausgabe) bzw im einschlägigen Tutorial zur FOR-Schleife ...

Falls Du übrigens wirklich Variablen innerhalb der Schleife erzeugen und verwenden müsstest, wäre "delayedExpansion" Dein Stichwort.

[Edit]
Hinsichtlich der Beschränkung auf genau 8 Zeichen im Namen würde sich dann eher
for /f %%i in ('dir /b *.pdf^|findstr /irx "........\.pdf"') do ren "%%i" "§§§1§§%%~ni§§§§§%%i"
anbieten.
[/Edit]

Grüße
bastla
Mitglied: koeson8
koeson8 26.12.2013 um 23:23:59 Uhr
Goto Top
Hallo Peter und Bastla!

Danke vielmals für eure Hilfe!!!

Weiter gebracht hat mich:

Zitat von @bastla:

Hinsichtlich der Beschränkung auf genau 8 Zeichen im Namen würde sich dann eher
for /f %%i in ('dir /b *.pdf^|findstr /irx "........\.pdf"') do ren
> "%%i" "§§§1§§%%~ni§§§§§%%i"
> 
anbieten.

Funktioniert wirklich sauber!

Der einzige kleine Schönheitsfehler ist, dass es statt § immer ° schreibt - womit könnte das zu tun haben?

@peter: ich habe eine *.bat Datei gemacht und führe den code per Doppelklick aus...
@bastla: könntest du mir von ...('dir /b *.pdf^|findstr /irx "........\.pdf"')... die Funktionsweise und was dahinter steckt erklären?

Nochmal großes DANKE an euch 2!
Mitglied: bastla
bastla 27.12.2013 um 00:15:15 Uhr
Goto Top
Hallo koeson8!

Vorweg zu
Der einzige kleine Schönheitsfehler ist, dass es statt § immer ° schreibt - womit könnte das zu tun haben?
Das hat mit dem Unterschied zwischen ANSI (Windows) und ASCII (CMD) zu tun und lässt sich durch Umstellen der Code-Page von (normalerweise) 850 auf 1252 per
chcp 1252
oder die Verwendung eines Editors, der eben ASCII-codiert speichern kann, beheben. Allenfalls kannst Du im Windows-Editor auch das Zeichen
õ
verwenden.
Zur Funktionsweise von "^|findstr /irx "........\.pdf" ("{dir /b" hattest Du ja selbst schon verwendet): Es wird damit einfach jede Zeile der Ausgabe (= jeder Dateiname) durch einen Filter geschickt ("gepiped" - in der Schleife ist anstatt | die "escapte" Fassung ^| zu verwenden), der nur genau (wird duch "/x" erreicht; das "r" wäre nicht unbedingt erforderlich)
  • 8 beliebige Zeichen (.),
  • einen Punkt (die Schreibweise "\." sorgt dafür, dass eben nicht irgendein Zeichen, sondern nur ein Punkt an dieser Stelle akzeptiert wird) und
  • pdf (wegen des "/i" ohne Unterscheidung zwischen Groß- und Kleinbuchstaben)
"durchlässt", sodass nur die passenden Dateinamen zur weiteren Verarbeitung zur Verfügung stehen - siehe dazu "findstr /?" ...

Grüße
bastla