armin1893
Goto Top

Verzeichnisnamen aus Textfile lesen und bestehende Verzeichnisse umbenennen

Hallo zusammen,

Ich habe sehr viele Dateien in sehr vielen Unterordnern mit temporären Verzeichnisnamen und ein Textfile mit den realen, gültigen Verzeichnisnamen. Nun sollen die gültigen Verzeichnisnamen aus dem Textfile gelesen, dem temporären Unterverzeichis zugeordnet und diese Unterverzeichnisse mit den gültigen Verzeichisnamen umbenannt werden.

Die Verzeichnisstruktur mit den temporären Unterverzeichnissen sieht folgendermaßen aus :

0001
0002
0003

Das Textfile mit den gültigen Verzeichnisnamen sieht folgendermaßen aus :

XYZ_ABC_0001_DAS_GUELTIGE_VERZEICHNIS
XYZ_ABC_0002_DAS_GUELTIGE_VERZEICHNIS
XYZ_ABC_0003_DAS_GUELTIGE_VERZEICHNIS

Nun soll das Textfile gelesen, mit dem Teilstring ab einer bestimmten Stelle und Länge das entsprechende, bestehende Verzechnis umbenannt werden. Im beschriebenen Fall sollen also die Verzeichnisse folgendermaßen umbenannt werden

0001          wird                 XYZ_ABC_0001_DAS_GUELTIGE_VERZEICHNIS 
0002          wird                 XYZ_ABC_0002_DAS_GUELTIGE_VERZEICHNIS 
0003          wird                 XYZ_ABC_0003_DAS_GUELTIGE_VERZEICHNIS 

Ist sowas mit einem DOS-Batch möglich und wenn ja, wie ?

Freu mich über jeden Lösungsansatz

Grüsse - Armin

Content-ID: 214056

Url: https://administrator.de/contentid/214056

Ausgedruckt am: 26.11.2024 um 04:11 Uhr

Snowman25
Snowman25 12.08.2013 um 16:42:19 Uhr
Goto Top
Hallo @Armin1893,

Ja, das sollte möglich sein. Allerdings wirst du dir meiner Meinung nach leichter tun, wenn du das in VBS (MS) oder AHK (non-MS) machst.

Gruß,
@Snowman25
112778
112778 12.08.2013 aktualisiert um 16:50:39 Uhr
Goto Top
Hi,

Zitat von @Armin1893:
Ist sowas mit einem DOS-Batch möglich und wenn ja, wie ?

Und täglich grüßt das Murmeltier......

Sieh einfach mal an das Ende des Threads oder verwende die Suche face-wink

Gruß
Metzger-MCP
Metzger-MCP 12.08.2013 aktualisiert um 17:43:53 Uhr
Goto Top
Hallo

Zitat von @Snowman25:
Hallo @Armin1893,

Ja, das sollte möglich sein. Allerdings wirst du dir meiner Meinung nach leichter tun, wenn du das in VBS (MS) oder AHK
(non-MS) machst.

Gruß,
@Snowman25

Hm glaub ich nicht ;)
Frag mal de Biber ... da wird dir aber einer geBATCHeld ... und das ist nicht schwer !!! ;)
je nachdem was du alles an Informationen hast, ist das ein Biber 1-2 Zeiler

Zum Problem leider sind deine Aussagen nicht aussagekräftig genug um dir da was passendes zu basteln face-smile

Wie liegen die Daten denn da ?
Über wie viele Ebenen sprechen wir den hier ?
Gibt es ein Quellverzeichnis oder muss man mit dem Baum arbeiten ?
Wie liegen die Daten denn aufbereitet vor als ?
Gibt es eine Struktur oder ist da alles Kraut und Rüben ... wie sind die Daten in der "" Textdatei "" aufbereitet...

zur Lösung brauchst du auf jedenfall

for
variablen
ren

eventuell auch ein move

Massenänderungen sind hier schon wirklich oft diskutiert worden mit Batchdatein

MFG Uwe
bastla
bastla 12.08.2013 aktualisiert um 21:04:56 Uhr
Goto Top
Hallo Armin1983!

Etwa so (ungetestet):
@echo off & setlocal
set "Ordner=D:\Das Verzeichnis"  
set "Datei=D:\Textfile Verzeichnisnamen.txt"  

for /d %%i in ("%Ordner%\*") do for /f "delims=" %%a in ('findstr "_%%~nxi_" "%Datei%"') do echo ren "%%i" "%%a" 2>nul  
pause
Wegen des "echo" vor dem "ren" werden die Befehle zum Umbenennen (zum Testen) nur angezeigt ...

Grüße
bastla

P.S.: @ Metzger-MCP: Ließe sich natürlich auch auf eine Zeile reduzieren ... face-wink
Biber
Biber 12.08.2013 aktualisiert um 19:16:50 Uhr
Goto Top
[OT] @ bastla
Zitat von @bastla:
Hallo Armin1983!
Hmm, der Armin1983 ist vielleicht der Ur-Ur-Enkel vom Beitragsersteller, aber diesmal hast du den falschen Addressaten...

P.S.: @ Metzger-MCP: Ließe sich natürlich auch auf eine Zeile reduzieren ... face-wink
Aber Inline-Kommentare in einer Batch-Zeile sind nicht wirklich schön....

Und wenn doch jede x-beliebige 0-Byte-Datei schon 16k auf den heutigen Festplatten belegt - selbst ein Songtext von Katy Perry würde soviel zugewiesen bekommen.
Dann ist es schon okay mit einem mehrzeiligen Batch-Epos für diese Umbenamserei.

Außerdem: Der TO braucht ihn ja nicht komplett an einem Tag zu lesen...

Grüße
Biber

P.S. @ All: Warum reagiert ihr denn so angefressen bei den Murmeltier-Fragen?
Ihr hattet doch schon Urlaub.... ;-(
[/OT]
bastla
bastla 12.08.2013 um 21:04:03 Uhr
Goto Top
[OT too] @ Biber
Erwischt ...

Und wenn doch jede x-beliebige 0-Byte-Datei schon 16k auf den heutigen Festplatten belegt
... dann wäre es Zeit für die "convert.exe" ... face-wink

Grüße
bastla
[/OT too]
kn0rki
kn0rki 12.08.2013 um 22:22:26 Uhr
Goto Top
Alles Powershell verweigerer hier? :D
Metzger-MCP
Metzger-MCP 13.08.2013 um 09:37:24 Uhr
Goto Top
Zitat von @kn0rki:
Alles Powershell verweigerer hier? :D

Moin face-smile

hörma nööööö

es war aber nach Batch gefragt ;) und batch != PS ..... hi hi

MFG Uwe


  • kann wegen Nichtigkeit gelöscht werden aber wegen Fragenbeantwortung sollte es bleiben
Armin1893
Armin1893 13.08.2013 um 09:40:54 Uhr
Goto Top
Hallo Bastla,

herzlichen Dank für Deine Lösung, funktioniert einfach perfekt !!!

Jetzt versuche ich es nur noch zu verstehen 8-) , gestaltet sich für mich jedoch schwierig...

Grundsätzlich bin ich überwältigt von der Kompetenz und der Hilfsbereitschaft in diesem Forum.

Danke nochmal und Grüsse
Armin
Armin1893
Armin1893 13.08.2013 um 09:44:11 Uhr
Goto Top
hallo zusammen,

mein Dank geht selbstverständlich auch an alle anderen, die sich mit meinem Problem befasst haben.

Wie zuvor schon gesagt, bin ich wirklich überwältigt von der Kompetenz und Hilfsbereitschaft in diesem Forum.

Allen nochmal herzlichen Dank

Grüsse-Armin
Metzger-MCP
Metzger-MCP 13.08.2013 um 09:45:19 Uhr
Goto Top
Zitat von @Biber:
Grüße
Biber

P.S. @ All: Warum reagiert ihr denn so angefressen bei den Murmeltier-Fragen?
Ihr hattet doch schon Urlaub.... ;-(
[/OT]

Leider noch nicht 1 Tag ;(
colinardo
colinardo 13.08.2013 um 09:53:47 Uhr
Goto Top
Zitat von @kn0rki:
Alles Powershell verweigerer hier? :D
$rootFolder = "C:\OrdnerIndemDeineOrdnerliegen"  
$txtFile = "C:\DeinFileInDemDieDateinamenStehen.txt"  

foreach($zeile in gc $txtFile){
    $foldername = $zeile.split("_")[2]  
    if (test-path -Path "$rootFolder\$foldername"){  
        ren -Path "$rootFolder\$foldername" -NewName $zeile  
    }
}
ohne Worte ...

Grüße Uwe
bastla
bastla 13.08.2013 aktualisiert um 12:05:56 Uhr
Goto Top
Hallo Armin1893!

Kurze Erklärung:

Mit
for /d %%i in ("%Ordner%\*") do
werden alle Verzeichnisse des angegebenen Start-Ordners nacheinander in "%%i" (mit vollem Pfad) bereitgestellt.
findstr "_%%~nxi_" "%Datei%"
sucht anhand des Namens "%%~ni" und der Endung "%%~xi" (vorsichtshalber - falls im Namen Punkte vorhanden wären, würde alles nach dem letzten Punkt als Extension betrachtet), zusammen dann "%%~nxi", zur Sicherheit noch eingerahmt durch die Trennzeichen "_" vor und nach dem Namen, in der Textdatei nach der passenden Zeile (sollte möglichst nur eine sein).

Um das Ergebnis weiterverarbeiten (= in eine Variable bekommen) zu können, wird um diese Suche die "for /f"-Schleife herumgelegt, welche dann in "%%a" die gefundene Zeile = den gefundenen neuen Namen liefert.

Das abschließende "2>nul" dient dazu, Fehlermeldungen zu unterdrücken und kann natürlich auch weggelasen werden.

Wenn Du das genauer sehen willst, brauchst Du eigentlich nur aus "echo off" ein "echo on" zu machen - dann wird jeder einzelne Befehl vor seiner Ausführung erst einmal angezeigt ...

Grüße
bastla
Armin1893
Armin1893 13.08.2013 um 11:09:54 Uhr
Goto Top
Hallo Bastla,

danke für Deine sehr schnelle, kurze, aber für mich sehr hilfreiche, verständliche Erklärung.

Jetzt versteh ich's einigermaßen.

Herzlichen Dank nochmal
Grüße-Armin