Rolf B: Dateien umbenennen

Beitrag lesen

Hallo Gerhard,

ich möchte alle Dateien *.shtml in meinen Ordnern in *.php umbenennen.
Ich habe zwar ein Programm, mit dem man Dateien in einem Ordner umbennen kann.

Hm. Heißt es "Betriebssystem"? Wenn nicht: die diversen Dateimanager sind zwar nützlich, aber sie halten Dich auch davon ab, den Umgang mit deinem Betriebssystem zu erlernen.

Windows Explorer ist ein besonders übles User-Verdummungs-Tool.

Infos zu Linux hast Du bekommen. Unter Windows kann man das so machen:

  • Befehlszeile öffnen
  • In den Stammordner wechseln, in dem und unter dem die shtml Dateien liegen
  • Diesen Befehl ausführen - STOP, noch nicht. Erst fertig lesen.
for /r %a in (*.shtml) do @move %a %~dpna.php

for führt eine Aktion pro Datei aus, die auf das Muster in den Klammern passt, also auf *.shtml

Diese Aktion steht hinter dem do.

Die Option /r besagt: Hier und in allen Unterverzeichnissen (r wie rekursiv)

%a ist der Name einer Variablen, die mit dem gefundenen Dateinamen zu befüllen ist und die nur während der ausgeführten Aktion einen Wert hat. So eine for-Variable darf nur aus einem Buchstaben bestehen und das % ist syntaktisch notwendig. Falls du den FOR-Befehl in einem CMD-Script verwenden willst, musst Du das % verdoppeln. Aber wirklich nur dann.

Das Wort in ist syntaktisch nötig, aber ansonsten nur Dekorationsmaterial.

Die ausgeführte Aktion ist der move Befehl. Das @ davor bedeutet nur: Schreib nicht für jede Datei in die Konsole, dass Du diesen Befehl ausführst (ein "ECHO OFF" für genau einen Befehl).

move X Y kann Dateien in andere Ordner verschieben und sie auch am Platz umbenennen. Im Gegensatz zum RENAME Befehl kann ich auch C:\FOO als aktuellen Ordner haben und die Datei C:\FOO\BAR\HUGO\demo.shtml umbenennen. Rename macht (mir?) dabei Probleme, wenn ich in einem Netzwerkordner unterwegs bin.

move C:\FOO\BAR\xyz.shtml C:\FOO\BAR\xyz.php würde also im Ordner C:\FOO\BAR die Datei xyz.shtml in xyz.php umbenennen.

Als FOR-Aktion schrieb ich:

@move %a %~dpna.php

%a ist die Variable, die von FOR geliefert wird und für den gerade gefundenen Dateinamen steht. Mit dem ~ Zeichen werden Steuerzeichen eingeleitet, die nur einen Teil des Dateinamens liefern. d=Drive, p=Path, n=Name, x=Extension - danach kommt der Variablenname. %~dpna holt aus dem Dateinamen, der in %a steht, also Laufwerk, Pfad und Name heraus - alles außer der Extension, die ja shtml ist. Damit ist %~dpna.php der Name der shtml-Datei, mit einer auf php abgeänderten File-Extension. Und das wollen wir ja haben.

Bevor Du das wirklich tust, führe in deinem Projekte-Ordner erst einmal diesen Befehl aus:

for /r %a in (*.shtml) do @echo move %a %~dpna.php

Durch den eingefügten ECHO wird der Move-Befehl erstmal nur angezeigt und nicht ausgeführt. Vergewissere Dich, dass die angezeigten move-Befehle Sinn ergeben. Wenn das zu schnell durchläuft, dann führe dies aus:

for /r %a in (*.shtml) do @echo move %a %~dpna.php>>movelog.txt

und schau Dir danach die Datei movelog.txt an. Falls Dein Projekteordner eine solche Datei schon enthält, denk Dir einen anderen Dateinamen aus.

Erst wenn Du sicher bist, dass die move-Befehle sinnvoll sind, führe den Befehl ohne das echo aus.

Rolf

--
sumpsi - posui - obstruxi