String(ordnernamen) in Datei suchen, mit gefundenem String andere Datei umbenennen
Hallo,
ich möchte folgendes bewerkstelligen. In einer Datei (abc.txt) stehen Pfadangaben zu einer gesuchten Datei+Endung. Die Endung ist immer die gleiche, jedoch variiert der Name. Ich möchte, dass die Datei den Namen des Ordners erhält, in welchem sie liegt. Die Anzahl der Unterordner ist variabel, ansonsten hätte ich den String zerlegt und mir die benötigten Token in einer Variable gespeichert. Ich weiß leider nicht, ich diese Unbekannte erhalte. Dieser Gedanke von mir muss nicht zwingend weiter verfolgt werden. Ich bin für jede Lösung zu haben.
Als Beispiel die abc.txt:
F:\quellordner\subordner1\xyz.ext
F:\quellordner\subordner1\subordner2\efg.ext
etc
Rauskommen soll letztendlich folgendes:
xyz.ext -> subordner1.ext
efg.ext -> subordner2.ext
Danke schonmal an alle
ich möchte folgendes bewerkstelligen. In einer Datei (abc.txt) stehen Pfadangaben zu einer gesuchten Datei+Endung. Die Endung ist immer die gleiche, jedoch variiert der Name. Ich möchte, dass die Datei den Namen des Ordners erhält, in welchem sie liegt. Die Anzahl der Unterordner ist variabel, ansonsten hätte ich den String zerlegt und mir die benötigten Token in einer Variable gespeichert. Ich weiß leider nicht, ich diese Unbekannte erhalte. Dieser Gedanke von mir muss nicht zwingend weiter verfolgt werden. Ich bin für jede Lösung zu haben.
Als Beispiel die abc.txt:
F:\quellordner\subordner1\xyz.ext
F:\quellordner\subordner1\subordner2\efg.ext
etc
Rauskommen soll letztendlich folgendes:
xyz.ext -> subordner1.ext
efg.ext -> subordner2.ext
Danke schonmal an alle
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 110076
Url: https://administrator.de/forum/stringordnernamen-in-datei-suchen-mit-gefundenem-string-andere-datei-umbenennen-110076.html
Ausgedruckt am: 30.04.2025 um 12:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo BD2001!
Mit einer kleinen Anpassung (jetzt wird der volle Pfad der jeweiligen Datei an das Unterprogramm übergeben) sähe das dann so aus:
extrahiert aus dem gelesenen Pfad nur den Pfadanteil - das Ergebnis lautet für die erste Zeile:
Gäbe es nicht den "\" am Ende, wäre der Rest einfacher; so aber wird dieser Pfad zunächst der Variablen %P% als Voraussetzung für die weitere Bearbeitung zugewiesen. Diese Bearbeitung findet im Unterprogramm ":ProcessPath" statt.
An das Unterprogramm wird zusätzlich der Dateiname + Dateityp (extension) als "%%~nxi" (in der neuen Version der gesamte Pfad), übergeben.
Der oben angeführte störende "\" lässt sich entfernen, indem von der Variablen %P% alle Zeichen bis auf das letzte verwendet werden - damit wären wir bei:
Da die Zerlegung eines Pfades nach rein formalen Aspekten vonstatten geht - der Teil nach dem letzten "\" und vor dem (dahinter liegenden) letzten "." (so vorhanden) wird als Dateiname betrachtet, der Teil ab dem letzten "." als Dateityp - kann daher nun einfach der Name des Ordners (="subordner1") als Dateiname (%%~na )gesehen werden. Um für den Fall vorzusorgen, dass sich im Ordnernamen auch ein "." befindet, wird zur Sicherheit auch noch der Typ (%%~xa) "mitgenommen" - in der Kurzfassung entsteht daraus:
Die Anführungszeichen davor und danach sind für die von Dir angeführten Beispiele eigentlich nicht nötig (schaden aber auch nicht), was sich aber ändert, wenn der Ordnername Leerzeichen enthält (also eine weitere Vorsichtsmaßnahme).
Schließlich wird dann noch der ursprüngliche Dateityp benötigt. Dieser lässt sich aus dem Übergabeparameter %1 (das Unterprogramm kann als eigener "Batch im Batch" betrachtet werden) auf die (nun schon bekannte) Art
entnehmen.
Grüße
bastla
Mit einer kleinen Anpassung (jetzt wird der volle Pfad der jeweiligen Datei an das Unterprogramm übergeben) sähe das dann so aus:
@echo off & setlocal
set "Datei=D:\abc.txt"
for /f "usebackq delims=" %%i in ("%Datei%") do set "P=%%~pi" & call :ProcessPath "%%i"
goto :eof
:ProcessPath
for %%a in ("%P:~,-1%") do echo ren %1 "%%~nxa%~x1"
goto :eof
Ne kleine Erklärung zum Ende der 4.("P=%%~pi" "%%~nxi")
Vorweg: Näheres kannst Du mit "for /?" (gegen Ende) nachlesen ...set "P=%%~pi"
\quellordner\subordner1\
An das Unterprogramm wird zusätzlich der Dateiname + Dateityp (extension) als "%%~nxi" (in der neuen Version der gesamte Pfad), übergeben.
...und 8.("%P:~,-1%" %%~nxa%~x1) Zeile
Hierzu ein Hinweis auf "set /?" ...Der oben angeführte störende "\" lässt sich entfernen, indem von der Variablen %P% alle Zeichen bis auf das letzte verwendet werden - damit wären wir bei:
\quellordner\subordner1
"%%~nxa"
Schließlich wird dann noch der ursprüngliche Dateityp benötigt. Dieser lässt sich aus dem Übergabeparameter %1 (das Unterprogramm kann als eigener "Batch im Batch" betrachtet werden) auf die (nun schon bekannte) Art
%~x1
Grüße
bastla
Hallo BD2001!

Dokumentieren könntest Du diese Tatsache noch mit einem dieser kleinen Wie kann ich einen Beitrag als gelöst markieren? ...
Grüße
bastla
Dann ist die Aufgabe wohl abgearbeitet
Das freut. Dokumentieren könntest Du diese Tatsache noch mit einem dieser kleinen Wie kann ich einen Beitrag als gelöst markieren? ...
Grüße
bastla
Moin BD2001,
willkommen im Forum.
<OT>
Running gag #393...
Unter Berücksichtigung dieses Beitrag zu dem Thema "Der Aldi-Duden - gefühlte Rechtschreibung für jeden Tach" plädiert die Mehrheit in diesem Forum mit 52,4% klar für die Schreibweise "umbennen".
Ich fürchte, meine Hoffnung auf eine Durchsetzung des Synonyms "umbenamsen" kann ich begraben (mit 2,7% bzw. 9 Fundstellen über die Forumssuche gerade mal soviel wie eine freie Wählergruppe im Breisgau). .
Aber - laut FAZ ist das hier ja eine Demokratie.
Ich werde Euer Wort "umbennen" weiterhin so schreiben, wie ich es will...
</OT>
Grüße
Biber
willkommen im Forum.
<OT>
Running gag #393...
...wollte mittels neuer for Schleife die Datei umbennen...
Unter Berücksichtigung dieses Beitrag zu dem Thema "Der Aldi-Duden - gefühlte Rechtschreibung für jeden Tach" plädiert die Mehrheit in diesem Forum mit 52,4% klar für die Schreibweise "umbennen".
Ich fürchte, meine Hoffnung auf eine Durchsetzung des Synonyms "umbenamsen" kann ich begraben (mit 2,7% bzw. 9 Fundstellen über die Forumssuche gerade mal soviel wie eine freie Wählergruppe im Breisgau). .
Aber - laut FAZ ist das hier ja eine Demokratie.
Ich werde Euer Wort "umbennen" weiterhin so schreiben, wie ich es will...
</OT>
Grüße
Biber