batch: alle Unterordner umbennenn ?
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
abschneiden
ausgabe
buchstabe
code
dank
datei
ergebnis
http
ordner
parameter
pause
problem
ren
set
treffer
umbenennen
url
verarbeiten
verzeichnis
zeichen
-
Hallo
ich möchte (unter Win7) per batch-Datei alle Unterordner eines Ordners umbennen
genauer gesagt, einen Prefix entfernen, der am Beginn jedes Unterodners steht
der Prefix ist dabei immer der gleiche, hier im Beispiel ist er daten_
Vorher:
- Ordner/
--- daten_AAA/
--- daten_BBB/
--- daten_CCC/
--- daten_DDD/
... soll werden zu:
- Ordner/
--- AAA/
--- BBB/
--- CCC/
--- DDD/
also ich brauche eine batch-Datei, die in dem Ordner, in dem sie ausgeführt wird
alle Unterordner umbenennen kann, also den Prefix "_daten" aus jedem Unter-Ordner-Name entfernt
habe schon bei google gesucht, soch leider kein passendes Beispiel gefunden
da ging es immer nur um Dateien umbennenen, nicht um Ordner (Verzeichnisse)
kann mir jemand so einen batch Code hier posten, der das kann ?
Danke!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du kannst in der Commandozeile im aktuellen Verzeichnis eingeben:
for /f "delims"_ tokens=2" %a in ('dir /b .') do ren daten_%a %a
Solltest du dir eine Batchdatei machen, auf die du beispielsweise ein Verzeichnis ziehst, müsstest du ein % mehr machen, und auf den Parameter reagieren. Der Inhalt der batch-Datei würde etwa so aussehen:
for /f "delims"_ tokens=2" %aa in ('dir /b %1') do ren daten_%%a %%a
-
Danke
schonmal ein Anfang, nur habe ich dabei noch ein Problem ...
die Ordner-Namen nach dem Prefix enthalten teilweise auch wieder einen Unterstrich
- Ordner/
--- daten_AAA/
--- daten_BBB/
--- daten_BBB_2/
--- daten_CCC/
--- daten_CCC_2/
zum Test habe ich erstmal Ausgabe mit echo anstatt REN gemacht
@echo off for /f "tokens=2 delims=_" %%a in ('dir /b %1') do echo daten_%%a --- %%a pause
bei der Ausgabe wird damit der letzte Teil des Ordnername abgetrennt
alles ab dem zweiten _ (Unterstrich) geht verloren
daten_AAA --- AAA daten_BBB --- BBB daten_BBB_2 --- BBB daten_CCC --- CCC daten_CCC_2 --- CCC
dadurch würde also der Ordner BBB_2 "nur" (bzw. auch) in BBB umbenannt, usw.
also der Teil des Ordner-Namens ab dem zweiten _ (Unterstrich) fehlt ...
... und das führt dann zu Fehler / Datenverlust
habe dann versucht es so zu machen, damit der "dritte" Teil mit verarbeitet wird
... aber klappt nicht, ist falsch:
for /f "tokens=2,3 delims=_" %%a , %%b in ('dir /b %1') do echo daten_%%a_%%b --- %%a_%%b
wie kann ich also beim splitten mit dem Trenner _ auch das dritte Element verarbeiten?
bzw. anders gefragt: wie bleibt der Verzeichnis-Name nach dem Prefix komplett erhalten ?
ich hoffe Ihr könnt mir helfen
Danke
-
in diesem Fall würde ich den Umweg über eine Variable nehmen, und dieser mit SET die ersten 6 Zeichen (daten_) abschneiden:
http://de.wikibooks.org/wiki/Batch-Programmierung:_Erweiterungen_unter_Windows_NT#Stringmanipulation -
Danke
weiteres Problem ... der Hauptordner enthält auch schon Unterordner ohne den Prefix
wenn ich also einfach die erten n Zeichen abschneide, dann zerschiesst es diese
jetzt bin ich immerhin soweit, das nur die betroffenen Verzeichnisse ausgegeben werden
(nur Ordner die den Teilstring "daten_" enthalten)
@echo off for /F "usebackq" %%a in (`dir /a:d /b`) do ( echo %%a | find "daten_" echo. ) echo. pause
das klappt, bur betroffenen Ordnernamen werden ausgegeben
aber ich bekomme es nicht hin, anstatt mit echo einfach auszugeben
das Ergebnis in eine Variable zu setzen, um damit dann weiter arbeiten zu können
mein Versuch (der nicht geht)
@echo off for /F "usebackq" %%a in (`dir /a:d /b`) do ( SET treffer = %%a | find "daten_" echo %treffer% echo. ) echo. pause
damit bekomme ich nur die Meldung: Echo ist ausgeschalten (Off)
???
sorry, aber batch check ich leider grad NULL ...
wie hole ich mir das Ergebnis von find ineine Variable
damit ich dann von dieser den Teilstring abschneiden kann für REN
set neuname = %treffer:~6%
REN %treffer% %neuname%
... oder wie sonst ?
-
Hallo,
kreditwunsch schrieb:
das was du da machst ist nicht ganz trivial, Infos dazu gibt es z.B. hier. Es hängt wohl damit zusammen, wann die Variablen in Werte aufgelöst werden.
... oder wie sonst ?
Ich denke so kannst du dein Problem lösen:
SETLOCAL ENABLEDELAYEDEXPANSION for /f %%a in ('dir /ad /b "daten_*"') do (set r=%%a && set r=!r:~6! && ren %%a !r!)
Gruß -
wow, super, Danke
damit funktioniert es
die Kür wäre jetzt noch
dass man den Prefix als Variable setzen kann (oder als User-Eingabe übergeben kann)
und die Länge des gesetzen Prefix gezählt wird (Anzahl Buchstaben für die rename Variable)
so, dass man es für jeden beliebigen Prefix verwenden kann,
aber wie gesagt, das wäre die Kür, da man es ja eher selten braucht
-
Hallo,
wie sagt man so schön: "Der Wunsch ist Vater vieler Kinder" ;).
Hier kannst du entweder die Variable ändern oder mein.bat daten aufrufen.
@echo off set pref=daten_ IF [%1] ==[] (call :rendirs %pref%) else (call :rendirs %1) goto :eof :rendirs for /f %%a in ('dir /ad /b "%~1*"') do (call :rename %%a %~1 ) goto :eof :rename set "oldname=%~1" call set "newname=%%oldname:*%~2=%%" echo renaming %oldname% to %newname% ren %oldname% %newname%
Gruß -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage