Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Rename vieler Verzeichnisse per Batch

Frage Entwicklung Batch & Shell

Mitglied: Prian0815

Prian0815 (Level 1) - Jetzt verbinden

12.01.2009, aktualisiert 15:10 Uhr, 4686 Aufrufe, 8 Kommentare

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!
Mitglied: bastla
12.01.2009 um 17:04 Uhr
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:
01.
@echo off & setlocal 
02.
for /f "delims=" %%i in (c:list.txt) do call :ProcessFolder "%%i" 
03.
goto :eof 
04.
 
05.
:ProcessFolder 
06.
set "Ordner=%~nx1" 
07.
echo ren %1 "%Ordner:~,-3% 
08.
goto :eof
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
Bitte warten ..
Mitglied: Prian0815
15.01.2009 um 08:51 Uhr
Hallo Bastla,
eigentlich hatte ich ja am Dienstag schon geantwortet, nur hat das wohl nicht geklappt - also nun noch mal.
Erstmal herzlichen Dank für deine schnelle und nette Antwort.
Ich hab am Dienstag natürlich gleich weitergemacht (Gestern mußte ich Urlaub nehmen). Inzwischen schaut mein Batch so aus:
"
echo off
del list.txt
cls
dir *(2)/S /B>list.txt
Pause
for /F "delims=|" %%n in (c:list.txt) do rd "%%n"
del list.txt
dir *(2)/S /B>list.txt
Pause
echo Umbenennen der Ordner mit Inhalt
echo off & set local
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

:eof
rem del list.txt
echo Verarbeitung der Verzeichnisse beendet!
"
Durch den Zusatz des Patameters '/S' beim 'dir'-Befehl, werden mir nun auch alle Unterverzeichnisse mitaufgelistet, was auch so von mir gwollt ist uind war.
Leider hört das Prog nun noch vor der Zeile "echo Umbenennen der Ordner mit Inhalt" ohne Kommentar auf. Das Löschen der Verzeichnisse incl. der Unterverzeichnisse hat in dem Moment erfolgreich stattgefunden. Ein Rename fand leider nicht statt, auch nicht als Simulation, wie von dir geschrieben. Ich hab echt keinen blassen Schimmer, weshalb noch nicht mal meine Kommentarzeile am BS erscheint.
Vielleicht fällt dir ja beim 'Betrachten des Batch auf, wo da der Fehler steckt.

Mit freundlichen Grüßen Prian0815


P.S.:always look on the bright Side of Life!
Bitte warten ..
Mitglied: bastla
15.01.2009 um 14:42 Uhr
Hallo Prian0815!

Vorweg: Speziell für das Posten von Batch- und ähnlichen Schnipseln hätte die Forumssoftware eine passende Formatierung 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:
01.
echo off & set local 
02.
for /f "delims=" %%i in ('dir "*(2)" /S /B') do call :ProcessFolder "%%i" 
03.
rem del list.txt 
04.
echo Verarbeitung der Verzeichnisse beendet! 
05.
goto :eof 
06.
 
07.
:ProcessFolder 
08.
set "Ordner=%~nx1" 
09.
echo ren %1 "Ordner:~,-3% 
10.
goto :eof
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
Bitte warten ..
Mitglied: Prian0815
15.01.2009 um 15:54 Uhr
Hallo Bastler,
erst mal danke für den Tipp wegen der Formatierung. Ich hatte mir das schon gedacht. Ist ja in anderen meiner Porogrammierforen auch so üblich, hab nur auf die Schnelle nix gefunden. jetzt aber das Format gleich mal abgespeichert, um es in Zukunft schnell zur Verfügung zu haben.
So und nu nochmal zu dem Progschnippsel. Ich hab den von dir geposteten Code jetzt mal als extra '.BAT' gespeichert, und bekomme beim Ausführen die Meldung: "echo off & set local
Umgebungsvariable local ist nicht definiert"
nachdem ich diese Zeile mit 'rem' auskommentiert habe, läuft das Prog zwar, allerdings wurden keine Verzeichnisse umbenannt.
Ich hab dann das Prog folgendermassen angepasst:

01.
rem echo off & set local 
02.
dir *(2)/S /B>list.txt 
03.
pause 
04.
for /f "delims=" %%i in (c:list.txt) do call :ProcessFolder "%%i" 
05.
del list.txt 
06.
echo Verarbeitung der Verzeichnisse beendet! 
07.
goto :eof 
08.
 
09.
:ProcessFolder 
10.
set "Ordner=%~nx1" 
11.
echo ren %1 "Ordner:~,-3% 
12.
goto :eof
Mit dem Ergevbniss, dass in der 'List.txt' wieder drin stand, was drin sterhn mußte aber wiederum kein Verzeichniss umbenannt wurde.Auch die Ausgabe "Verarbeitung der Verzeichnisse beendet" erschien nicht, aber die 'List.txt' ist im Verzeichniss nicht mehr vorhanden. Dieser Befehl wurde also noch ausgeführt.

Mit freundlichem Gruß Prian0815
Bitte warten ..
Mitglied: bastla
16.01.2009 um 07:52 Uhr
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
Batchdatei.cmd >Batchdatei-Log.txt 2>&1
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
Bitte warten ..
Mitglied: Prian0815
16.01.2009 um 10:41 Uhr
Hallo Bastler,
scheint ne längere Prozedur mit mir als Anfänger hier zu werden. Also irgendwie wills nich hinhaun.
Der Blank vor dem 'local' war auf jeden Fall falsch, den da meckert er jetzt nicht mehr.
ich hab das mit 'Echo on' und Auftruf aus der Kommandozeile gemacht. Das sah dann auch alles recht gut aus, was er mir da so angezeigt hat. Dann hab ich aus dem 'on' ein 'off' gemacht und das Prog laufen lassen. Dummerweise hat es aber die Verzeichnisse (5 gesamt, davon 3 'Unterverzeichnisse, teils leer, teils mit Dateien) nicht umbenannt. die 'list.txt' war am Ende nicht vorhanden, die Kommentarzeile 'echo Verarbeitung der Verzeichnisse beendet!' wurde allerdings nicht geschrieben. Hier zur Sicherheit das aktuelle Batch wie ich es mal mit Aufruf mal mit Doppelklick hab laufen lassen

01.
echo off & setlocal 
02.
dir *(2)/S /B>list.txt 
03.
pause 
04.
for /f "delims=" %%i in (list.txt) do call :ProcessFolder "%%i" 
05.
del list.txt 
06.
echo Verarbeitung der Verzeichnisse beendet! 
07.
goto :eof 
08.
 
09.
:ProcessFolder 
10.
set "Ordner=%~nx1" 
11.
ren %1 "Ordner:~,-3% 
12.
goto :eof
Gruß Prian0815
Bitte warten ..
Mitglied: bastla
16.01.2009 um 11:54 Uhr
Hallo Prian0815!

Inzwischen habe ich doch noch beide Augen aufbekommen, und dann endlich auch beide Fehler (2 Fehler auf 20 Zeichen - reife Leistung ) in Zeile 11 gefunden - sory, manchmal dauert's lang, dann wieder länger ...

Eigentlich sollte die Zeile so lauten:
ren %1 "%Ordner:~,-3%"
Grüße
bastla
Bitte warten ..
Mitglied: Prian0815
16.01.2009 um 12:47 Uhr
Hi bastler,
jepp - das wars - jetzt hat das geklappt.
und wegen dem länger - mach der da ma nix draus, 'was lange währt wird endlich gut' sacht n altes Sprichwort.
Herzlichen Dank dir!!
Nun kann ich gleich mein nächstes Prob mit dem korrekten Backup-Befehl angehn.

01.
backup c:\Dokumente und Einstellungen\Brenner\Eigene Dateien c: /s
bei diesem sagt er mir nämlich, dass der falsch geschrieben ist und ich hab jetzt auch schon xmal draufgeschaut, Bücher gewälzt und verglichen, Parameter überprüft usw. Eigentlich soll der nur das angegebene Verzeichniss nach 'C:' sichern. Mit dem 'Xcopy' welchen ich erast mal für schwieriger zum handeln hielt, hab ich das schon mal hinbekommen.
Nu werd ich mich ma auf die Suche machen und hoffen, dass ich die korrekte Schreibweise noch rausfinde.

Gruß Prian
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch zum bearbeiten mehrerer CSV (2)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...