Benjamin_O Geschrieben 2. März 2005 Teilen Geschrieben 2. März 2005 Ich habe hier die Situation, daß per Batch Datei in bestimmten Abständen alle Dateien mit der Endung psg in pop umgewandelt werden sollen. Die Dateien befinden sich dabei in verschiedenen Unterverzeichnissen. Gibt es eine Möglichkeit, mit dem DOS-Befehl rename alle Dateien auch in Unterverzeichnissen umzubenennen, ohne ständig den Pfad anzugeben ? Meine bisherige BATCH-Datei sieht wie folgt aus: (Beispiel) NET STOP "AVM KEN" cd c:\programme\ken!\pop\Verzeichnis1 rename *.psg *.pop cd\ cd c:\programme\ken!\pop\Verzeichnis2 rename *.psg *.pop cd\ NET START "AVM KEN" Ingesamt gibt es ca. 30 Unterverzeichnisse dieser Art. Mfg Benjamin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 3. März 2005 Teilen Geschrieben 3. März 2005 heissen die wirklich "Verzeichnis1" "Verzeichnis2" "Verzeichnis3" etc.? Dann kann man dass schön per FOR Schleife lösen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 3. März 2005 Teilen Geschrieben 3. März 2005 @echo off NET STOP "AVM KEN" SET Zaehler=0 SET Pfad=c:\programme\ken!\pop :Umb SET /A Zaehler+=1 IF EXIST %Pfad%\Verzeichnis%Zaehler% goto umbenennen goto ende :umbenennen cd %Pfad%\Verzeichnis%Zaehler% ren *.psg *.pop goto Umb :ende NET START "AVM KEN" Wenn die Ordner Verzeichnis1 Verzeichnis2 etc. heissen funktioniert der Code. (und das ohne FOR-Schleife ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hmaas Geschrieben 3. März 2005 Teilen Geschrieben 3. März 2005 Gibt es eine Möglichkeit, mit dem DOS-Befehl rename alle Dateien auch in Unterverzeichnissen umzubenennen, ohne ständig den Pfad anzugeben ? Die Syntax ist doch: RENAME [Laufwerk:][Pfad]Dateiname1 Dateiname2 REN [Laufwerk:][Pfad]Dateiname1 Dateiname2 somit kannst du dir zumindest das Wechseln der Verzeichnisse mit cd.. sparen. Gruß Pönk Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Benjamin_O Geschrieben 3. März 2005 Autor Teilen Geschrieben 3. März 2005 @Thombo Die Bezeichnungen Verzeichnis1, Verzeichnis2 waren nur Beispiele, da hier sonst Benutzernamen stehen. Trotzdem danke für die Hinweise, evtl. läßt sich daraus ja noch etwas machen. Mfg Benjamin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 3. März 2005 Teilen Geschrieben 3. März 2005 Die Syntax ist doch: RENAME [Laufwerk:][Pfad]Dateiname1 Dateiname2 REN [Laufwerk:][Pfad]Dateiname1 Dateiname2 somit kannst du dir zumindest das Wechseln der Verzeichnisse mit cd.. sparen. Gruß Pönk dachte ich auch, nur läuft das dann so bei mir aufn Hammer. Ich gehe davon aus,dann mit REN [Laufwerk:][Pfad]Dateiname1 Dateiname2 nur einzelne Dateien (also keine Wildcards) funktionieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 3. März 2005 Teilen Geschrieben 3. März 2005 Dann brauchst du 2 Dateien. Eine Batch, und einmal eine Datei wo alle Namen der User drin stehen. C:\Namen.txt Liese Lotte Hans Karla Paul hubert @echo off NET STOP "AVM KEN" SET Pfad=c:\programme\ken!\pop For /f %%i in (C:\Namen.txt) do (call :umbenennen %%i) goto ende :umbenennen cd %Pfad%\%1 ren *.psg *.pop :ende NET START "AVM KEN" Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_Martin_ Geschrieben 4. März 2005 Teilen Geschrieben 4. März 2005 Es geht auch einfacher (nichts gegen deine Lösung, Thombo): @ECHO OFF NET STOP "AVM KEN" SET verzeichnis=c:\programme\ken!\pop FOR /F %%a in ('DIR %verzeichnis% /AD /B') DO ( IF EXIST "%%~fa\*.psg" REN "%%~fa\*.psg" "*.pop" ) NET START "AVM KEN" Erläuterung: FOR führt zunächst den Befehl in Klammern aus: DIR %verzeichnis% /AD /B gibt alle Unterordner in dem oben definierten Verzeichnis aus, und zwar im einfachen Format (nur der Name, keine Grösse etc.). Nun setzt FOR nacheinander jeden Ordnernamen in die Variable %%a ein und führt den IF Befehl aus. (%%~fa expandiert den einfachen Name %%a in einen vollständigen Pfad) Der IF Befehl prüft, ob in dem Unterordner überhaupt eine .psg Datei liegt, und nur wenn das der Fall ist, werden alle .psg nach .pop umbenannt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 4. März 2005 Teilen Geschrieben 4. März 2005 Es geht auch einfacher (nichts gegen deine Lösung, Thombo): Kein Problem Ich lern gerne was dazu IF EXIST "%%~fa\*.psg" REN "%%~fa\*.psg" "*.pop" Könntest du mir das nochmal genauer erklären ? Btw: Deine Lösung geht in jeden UNterordner von %verzeichnis% nur das mit dem umbenennen scheint hier nicht zu funktionieren. Ich bin mir ziemlich sicher, dass du für das umbennen mit Wildcards vorher per "cd" in den Ordner wechseln musst....... Ich habe mir eine entsprechende Ordnerstruktur angelegt: Hier mal die Batch "in Action" C:\>SET verzeichnis=c:\programme\ken!\pop C:\>FOR /F %a in ('DIR c:\programme\ken!\pop /AD /B') DO (IF EXIST "%~fa\*.psg" REN "%~fa\*.psg" "*.pop" ) C:\>(IF EXIST "C:\Verzeichnis1\*.psg" REN "C:\Verzeichnis1\*.psg" "*.pop" ) C:\>(IF EXIST "C:\Verzeichnis2\*.psg" REN "C:\Verzeichnis2\*.psg" "*.pop" ) C:\>(IF EXIST "C:\Verzeichnis3\*.psg" REN "C:\Verzeichnis3\*.psg" "*.pop" ) C:\>(IF EXIST "C:\Lotte\*.psg" REN "C:\Lotte\*.psg" "*.pop" ) C:\>(IF EXIST "C:\Liese\*.psg" REN "C:\Liese\*.psg" "*.pop" ) C:\>pause Drücken Sie eine beliebige Taste . . . Das Verzeichnis1 liegt jedoch hinter c:\programme\ken!\pop (ich versuche hier alle *.psg in *.pop umzubenennen, da bei mir alle Dateien in den Uterordnern von c:\programme\ken!\pop die Endung *.psg haben Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 4. März 2005 Teilen Geschrieben 4. März 2005 SET Pfad=c:\programme\ken!\pop FOR /F %%a in ('DIR %pfad% /AD /B') DO (call :umbenennen %%a) goto :eof :umbenennen cd %Pfad%\%1 If Exist *.psg ren *.psg *.pop Recursives durchsuchen aller Unterordner von c:\programme\ken!\pop. Wechseln in den Unterordner, sobald eine *.psg Datei gefunden wird, wird Sie in *.pop umbenannt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_Martin_ Geschrieben 4. März 2005 Teilen Geschrieben 4. März 2005 Ups, da ist ein Fehler drin, den ich bisher gar nicht kannte - danke Und zwar arbeitet die Expansion ~f nur richtig, wenn die Batchdatei im selben Ordner liegt wie die Unterverzeichnisse (das mache ich beim Testen immer so). Richtig ist es so: @ECHO OFF SET verzeichnis=c:\programme\ken!\pop FOR /F %%a in ('DIR %verzeichnis% /AD /B') DO ( IF EXIST "%verzeichnis%\%%a\*.psg" REN "%verzeichnis%\%%a\*.psg" "*.pop" ) Das Umbenennen in Unterverzeichnissen funktioniert mit Wildcards, auch ohne in das Verzeichnis wechseln zu müssen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 4. März 2005 Teilen Geschrieben 4. März 2005 Das Umbenennen in Unterverzeichnissen funktioniert mit Wildcards, auch ohne in das Verzeichnis wechseln zu müssen. Das funktioniert be mir nicht (WindowsXP SP2) Hier "meine" Datei zum testen: @ECHO OFF SET verzeichnis=D:\Filme\Dbox2TVAufnahmen FOR /F %%a in ('DIR %verzeichnis% /AD /B') DO ( IF EXIST "%verzeichnis%\%%a\*.mpg" REN "%verzeichnis%\%%a\*.mpg" "*.avi" ) Ich starte die BatchDatei von C:\umb.cmd Im Ordner D:\Filme\Dbox2TVAufnahmen liegen Ordner wie: "2005-02-22-Die Simpsons" "2005-02-23-Die Simpsons" Die Dateien in den Ordnern heissen: "Die Simpsons-1_00_cut.mpg" "Die Simpsons-1_00_cut.mpg" (die heissen immer gleich Die Batch läuftz ohne Fehler durch... Die IF-Bedingung trifft auch zu, nur das umbenennen funktioniert nicht. Ich hab auch mal was in der Art gelesen, dass vorher in den Ordner gewechselt werden muss, bevor mit Wildcards umbennat wird. Kanns nur nicht mehr finden (und hab daher auch keine verlässliche Quellenangabe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_Martin_ Geschrieben 5. März 2005 Teilen Geschrieben 5. März 2005 Und wieder ein Fehler, diesmal meine eigene Nachlässigkeit. Martin, trink mehr Kaffee :floet: Das Problem sollte das Leerzeichen in deinen Ordnernamen sein. Mit dem geposteten FOR-Befehl wird in die Variable %%a immer nur der Teil VOR dem Leerzeichen geschrieben. Deine Batch funktioniert, weil der CD Befehl in das (durch das Datum) eindeutig bezeichnete Verzeichnis springt (auch wenn %%a nur einen Teil des Ordnernamens enthält); meine funktioniert nicht (auch das IF trifft nicht zu), weil die Datei "D:\Filme\Dbox2TVAufnahmen\2005-02-22-Die\*.mpg" nicht gefunden werden kann. Um das Problem zu lösen, teilt man dem FOR-Befehl also mit, dass ALLES in die Variable %%a geschrieben wird, inkl. Leerzeichen: @ECHO OFF SET verzeichnis=c:\programme\ken!\pop FOR /F "tokens=*" %%a in ('DIR %verzeichnis% /AD /B') DO ( IF EXIST "%verzeichnis%\%%a\*.psg" REN "%verzeichnis%\%%a\*.psg" "*.pop" ) So geht es bei mir - bitte teste es mal bei dir, Thombo. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 5. März 2005 Teilen Geschrieben 5. März 2005 har... For und Leerzeichen..... stimmt genau. Auf sowas ähnliches bin ich schon mal reingefallen.... Schönes Wochenende Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.