Zum Inhalt springen

MS-DOS Befehl rename


Benjamin_O

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen


@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 ;-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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"

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es geht auch einfacher (nichts gegen deine Lösung, Thombo):

Kein Problem :) Ich lern gerne was dazu :D

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen


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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...