Batch-Datei, Dateiendung ändern, samt Unterordnern?

4 Antworten

Ein Tip, wie man es machen kann, wenn der Kommandozeileninterpreter nicht die benötigte Funktion anbietet:

DIR \ /S/B {pattern} > machwasmitdateien.bat

machwasmitdateien.bat per gutem Editor und geeigneten Kopier- und Ersetz-Vorgängen so bearbeiten, dass darin die Befehle zum Ändern stehen. In Deinem Beispiel wären das:

Ersetzen von z.B "C:\" durch "MOVE "C:\"

Inhalt als Spalte kopieren und rechts anfügen

Ersetzen der Dateiendung ".dat" durch ".man" in der zweiten Spalte.

Speichern und ausführen.

Hallo,

das sollte es sein:

@echo off

for /r "%cd%" %%g in (*.dat) do rename "%%g" "%%~ng.man"

pause
exit

Hauptvogel 
Beitragsersteller
 14.03.2017, 09:04

Super, es hat geklappt. Damit wird aus x Stunden sinnloser von Hand ändern Arbeit, eine Sache von wenigen Sekunden :)

1A und Danke nochmal.

0
Hauptvogel 
Beitragsersteller
 18.03.2017, 07:24
@acdxx

Es gibt da noch ein Problem, vielleicht kennst du ja die Lösung.

Ich habe das ganze vorher ja gestestet. Ordner samt Unterordner angelegt und da dann .txt-Dateien reingepackt.

Dann das Script so bearbeitet, dass es diese .txt-Dateien in .doc umbenennt. Oder aus .dat .man macht und das klappte ja auch alles.

Als ich dann vor dem Server saß, war es aber so, dass der die Dateien nicht umbenannte.

Es geht dabei um Servergespeicherte Profile die in einem Ordner profiles liegen und da drin sind ja dann die ganzen .v2 Profile.

Diese sind mit der Dateiendung .man abgeschlossen und werden als .dat wieder zu veränderbaren Profilen.

Nun geht es darum bei Änderungen diese eben mal aufsperren zu müssen. Da es nicht grad wenige sind, kommt so ein Script zum auf- und zusperren der Profile gut.

Dummerweise klappt der script in dem Ordner nicht, obwohl es kein Rechteproblem ist, denn die Rechte als Admin oder system darin zu schreiben sind da.

Leider sind die Datein auch versteckte Dateien und sie haben das Attribut schreibgeschützt, was dummerweise auch noch ausgegraut ist. Von Hand kann man die dateien umbenennen, das script drüber passiert gar nix.

Muss im script noch etwas angepasst werden, damit er auch diese Dateien umbenennt?

Vielleicht würde es mit einem shell klappen, nur wie ist beim powershell der Befehl dazu hmm...

Vielleicht kennst du ja die Antwort.

Danke nochmal und viele Grüße

0
acdxx  18.03.2017, 09:02
@Hauptvogel

Geht es dir nur um die Datei ntuser.dat? Dann würde ich nicht nach *.dat suchen, weil dann möglicherweise auch noch andere Dateien im Profil umbenannt werden.

@echo off

for /r "%cd%" %%g in (ntuser.dat) do (
   if exist %%g rename %%g "ntuser.man" && echo %%g
)

pause
exit

Vielleicht ist das besser. Der Nachteil ist nur, dass man die Rekursionstiefe nicht einstellen kann und er sämtliche Unterordner auf Vorhandensein einer ntuser.dat prüft.

Die gefundenen Vorkommnisse werden per echo zur Info nochmal ausgegeben. Du kannst das rename auch erstmal weglassen und mit dem echo nur gucken, was er alles findet.

Ob es da in den Profilverzeichnissen zu irgendwelchen Rechteproblemen kommt, kann ich nicht sagen. Script per "als Administrator ausführen" gestartet?

0
Hauptvogel 
Beitragsersteller
 19.03.2017, 06:30
@acdxx

Ich werde das ganze nächste Woche mal bei uns ausprobieren. Dort wo es dann nötig ist, ist eine Außenstelle, da komme ich erst wieder in ein paar Wochen hin, es sei denn es gibt ein Problem.

Ich gebe dann mal wieder eine Info, kann ein wenig dauern.

Danke soweit erstmal.

0
Hauptvogel 
Beitragsersteller
 20.03.2017, 08:55
@Hauptvogel

Hab das mal an einfachen Dateien probiert.

Es gibt einen Syntaxfehler, sobald er die entsprechende Datei anpackt.

für was steht eigentlich %%g? Es ist eine Variable, oder hat die Zeichenfolge eine tiefere Bedeutung?

Dein erster Script klappt ja an sich prima. Nur eben dann im profiles-Ordner passiert nix. Als gäbe es Rechteprobleme, die aber nicht da sind. ALs Admin natürlich ausgeführt das Script.

Sehe das Problem nicht. Könnte maximal mit dem Attribut "versteckt" zu tun haben...Hmm hatte so ein Fall noch nicht.

Vielleicht fällt dir noch etwas ein.

Danke soweit erstmal.

0

einfach in den Ordner gehen in cmd und dann ren *(Endung hier)

zum Beispiel du hast .png Dateien willst aber jpg haben dann schreibst du

ren *.jpg