Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MS-DOS Befehl rename

Empfohlene Antworten

Veröffentlicht

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


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

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

  • Autor

@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

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.

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"

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.

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


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.

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.

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.