Batch-Datei, Dateiendung ändern, samt Unterordnern?
Hallo,
ich suche ein script, welches aus einer bestimmten Dateiendung, die immer in vielen Unterordnern liegt, eine andere macht.
In meinem Fall soll die Endung .dat nach .man unbenannt werden.
Mit "rename" ist das ja für einen Ordner kein Problem. Jedoch liegen die Dateien immer in verschiedenen Ordnern in einem Ordner als Unterordner und müssen also der Reihe nach durchgegangen werden und die bestimmte Dateiendung umbenannt werden.
Dazu benötigt es also etwas mehr Aufwand. Nur habe ich davon keinen Plan, wie man in einem rename-Befehl oder ähnlichen Code, noch eine Schleife einbettet, die die Ordner durchgeht.
Ist jemand hier der davon etwas mehr versteht und mir so eine Schleife bzw. den Scipt baut? Ich habe es schon bissel versucht mit
for /R %x in (*.) do rename "%x." "%x.man"
Was jedoch nicht funktioniert. Vielleicht hat ja jemand die passende Hilfe parat.
Vielen Dank
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
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
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?
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.
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.
Wenn du häufiger solche Probleme hast, dann solltest du die Freeware https://www.advancedrenamer.com/ nutzen. Die kann Muster ersetzen, Nummerieren ...
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
Super, es hat geklappt. Damit wird aus x Stunden sinnloser von Hand ändern Arbeit, eine Sache von wenigen Sekunden :)
1A und Danke nochmal.