Rename vieler Verzeichnisse per Batch
Hallo Adminiustratoren-Team.
Ich bin noch vollkommener Neuling, sowohl hier im Forum wie auch im Administratoren-Bereich. Ich bekomme gerade eine dahingehende innerbetriebliche Foprtbildung. Im Moment befasse ich mich mit der Dos-Batch-Programmierung. Auf meinem eigenen Rechner wurden fast alle Unterverzeichnisse in einem Hauptverzeichniss (MyPlaylists) umbenannt. Inwischen ist bei den meisten der Zusatz (2) hinzugefügt worden.ich möchte nun per Batch diese Namensänderung rückgängig machen. konnte aber bislang nicht viel über den Befehl 'Rename' in Erfahrung bringen. Da ich sicherheitshalber alle leeren Unterverzeichnisse vor der Umbenennung löschen möchte, habe ich diesen Teil mit der Hilfe eines Freundes schon Programmiert. Das bisher erreichte sieht bislang so aus.
"echo off
cls
dir *(2)/B>list.txt
Pause
for /F "delims=|" %%n in (c:list.txt) do rd "%%n"
echo Umbenennen der Ordner mit Inhalt
??? /F delims=|%%n in (c:list.txt) do???
"
Ich hoffe mir kann hier jemand weiterhelfen, damit ich mit dem nächsten Befehl, die vorhandene 'list.txt' durchlaufen kann und dabei bei allen Verzeichnissnamen nur das (2) am Ende wegbekomme.
Für eure Hilfe meinen Dank im Vorraus.
P.S.: alöways look on the bright Side of Life!
Ich bin noch vollkommener Neuling, sowohl hier im Forum wie auch im Administratoren-Bereich. Ich bekomme gerade eine dahingehende innerbetriebliche Foprtbildung. Im Moment befasse ich mich mit der Dos-Batch-Programmierung. Auf meinem eigenen Rechner wurden fast alle Unterverzeichnisse in einem Hauptverzeichniss (MyPlaylists) umbenannt. Inwischen ist bei den meisten der Zusatz (2) hinzugefügt worden.ich möchte nun per Batch diese Namensänderung rückgängig machen. konnte aber bislang nicht viel über den Befehl 'Rename' in Erfahrung bringen. Da ich sicherheitshalber alle leeren Unterverzeichnisse vor der Umbenennung löschen möchte, habe ich diesen Teil mit der Hilfe eines Freundes schon Programmiert. Das bisher erreichte sieht bislang so aus.
"echo off
cls
dir *(2)/B>list.txt
Pause
for /F "delims=|" %%n in (c:list.txt) do rd "%%n"
echo Umbenennen der Ordner mit Inhalt
??? /F delims=|%%n in (c:list.txt) do???
"
Ich hoffe mir kann hier jemand weiterhelfen, damit ich mit dem nächsten Befehl, die vorhandene 'list.txt' durchlaufen kann und dabei bei allen Verzeichnissnamen nur das (2) am Ende wegbekomme.
Für eure Hilfe meinen Dank im Vorraus.
P.S.: alöways look on the bright Side of Life!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 105787
Url: https://administrator.de/contentid/105787
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo Prian0815 und willkommen im Forum!
Soferne es nur darum geht, für alle Ordner aus "list.txt" die letzten 3 Zeichen zu entfernen, könnte der Batch so aussehen:
Das "echo" vor dem "ren" sorgt dafür, dass das Umbenennen (zum Testen) durch das Anzeigen des jeweiligen Befehles nur simuliert wird - wenn Du das "echo" entfernst, wird die Namensänderung tatsächlich durchgeführt.
Informationen zu den verwendeten Befehlen findest Du mit "set /?" bzw "for /?" (hier ziemlich am Ende) ...
Grüße
bastla
Soferne es nur darum geht, für alle Ordner aus "list.txt" die letzten 3 Zeichen zu entfernen, könnte der Batch so aussehen:
@echo off & setlocal
for /f "delims=" %%i in (c:list.txt) do call :ProcessFolder "%%i"
goto :eof
:ProcessFolder
set "Ordner=%~nx1"
echo ren %1 "%Ordner:~,-3%
goto :eof
Informationen zu den verwendeten Befehlen findest Du mit "set /?" bzw "for /?" (hier ziemlich am Ende) ...
Grüße
bastla
Hallo Prian0815!
Vorweg: Speziell für das Posten von Batch- und ähnlichen Schnipseln hätte die Forumssoftware eine passende zu bieten ...
Da Du die leeren Verzeichnisse schon gelöscht hast, könntest Du den Batch auf das Umbenennen reduzieren - das könnte etwa so aussehen:
Teste doch bitte einmal diese Version ...
Noch eine Anmerkung:
"goto :eof" ist nicht dafür gedacht, zu einer existierenden Marke zu springen, sondern heißt ganz allgemein: "Beende die Verarbeitung!" (entweder des Batches, wie in Zeile 5, oder eines Unterprogrammes - das würde etwa einem "End Sub" aus neuerem oder einem "Return" aus älterem BASIC entsprechen).
Im Unterprogramm ":ProcessFolder" wäre die entsprechende Zeile eigentlich gar nicht nötig, da nach der letzten Batchzeile ein automatisches "Beenden" erfolgt, allerdings ist damit für den Fall vorgesorgt, dass unterhalb noch weitere Programmteile angefügt würden.
Grüße
bastla
Vorweg: Speziell für das Posten von Batch- und ähnlichen Schnipseln hätte die Forumssoftware eine passende zu bieten ...
Da Du die leeren Verzeichnisse schon gelöscht hast, könntest Du den Batch auf das Umbenennen reduzieren - das könnte etwa so aussehen:
echo off & set local
for /f "delims=" %%i in ('dir "*(2)" /S /B') do call :ProcessFolder "%%i"
rem del list.txt
echo Verarbeitung der Verzeichnisse beendet!
goto :eof
:ProcessFolder
set "Ordner=%~nx1"
echo ren %1 "Ordner:~,-3%
goto :eof
Noch eine Anmerkung:
"goto :eof" ist nicht dafür gedacht, zu einer existierenden Marke zu springen, sondern heißt ganz allgemein: "Beende die Verarbeitung!" (entweder des Batches, wie in Zeile 5, oder eines Unterprogrammes - das würde etwa einem "End Sub" aus neuerem oder einem "Return" aus älterem BASIC entsprechen).
Im Unterprogramm ":ProcessFolder" wäre die entsprechende Zeile eigentlich gar nicht nötig, da nach der letzten Batchzeile ein automatisches "Beenden" erfolgt, allerdings ist damit für den Fall vorgesorgt, dass unterhalb noch weitere Programmteile angefügt würden.
Grüße
bastla
Hallo Prian0815!
Wie mir das Leerzeichen zwischen "set" und "local" gelungen ist (oben hatte ich noch keines), kann ich zwar nicht erklären, dass es aber nicht da hin gehört, ist klar (ich korrigiere das zur Sicherheit) ...
Nur zur Sicherheit: Vereinheitliche die Schreibweise für die "list.txt" - in der Schleife steht noch das (unnötige) "c:" davor.
Ansonsten kannst Du eigentlich nur aus dem "echo off" ein "echo on" machen und den Batch von der Kommandozeile (was beim Testen von Batches ohnehin immer zu empfehlen ist) starten. Es werden dann alle Befehle zunächst einmal (mit bereits aufgelösten Variablen) angezeigt und dann erst ausgeführt. Bei einem längeren Batch böte es sich dann noch an, diese Anzeige durch einen Aufruf der Art
in eine Datei umzuleiten und auch die Fehlermeldungen (Ausgabekanal 2) in die selbe Datei schreiben zu lassen.
So oder so sollten sich aus dem Ablaufprotokoll Rückschlüsse ziehen lassen ..
Grüße
bastla
Wie mir das Leerzeichen zwischen "set" und "local" gelungen ist (oben hatte ich noch keines), kann ich zwar nicht erklären, dass es aber nicht da hin gehört, ist klar (ich korrigiere das zur Sicherheit) ...
Nur zur Sicherheit: Vereinheitliche die Schreibweise für die "list.txt" - in der Schleife steht noch das (unnötige) "c:" davor.
Ansonsten kannst Du eigentlich nur aus dem "echo off" ein "echo on" machen und den Batch von der Kommandozeile (was beim Testen von Batches ohnehin immer zu empfehlen ist) starten. Es werden dann alle Befehle zunächst einmal (mit bereits aufgelösten Variablen) angezeigt und dann erst ausgeführt. Bei einem längeren Batch böte es sich dann noch an, diese Anzeige durch einen Aufruf der Art
Batchdatei.cmd >Batchdatei-Log.txt 2>&1
So oder so sollten sich aus dem Ablaufprotokoll Rückschlüsse ziehen lassen ..
Grüße
bastla