Puh, Batch ist doch länger her und komplizierter als ich befürchtete (ähnelt fast schon eher regulären Ausdrücken als z.B. PHP). Wäre Folgendes dann korrekt?
Code:
for /r "D:\Archiv" %%i in ("*.txt") do (
set path=%%~dpi
set name=%%~ni
set ext=%%~xi
echo Pfad: %path%
echo Dateiname: %name%
echo Extension: %ext%
ren "%path%backup.bak" "%name%.bak"
)
- - - Beitrag zusammengeführt - - -
Batch scheint der Horror zu sein, sehr kryptisch.
Dies hier läuft:
Code:
for /R "D:\Archiv\Unterordner" %%f in (*.txt) do (
echo %%f
)
Wie ich aber nun in ein und derselben Schleife auf die drei Bestandteile Pfad, Dateiname und Extension zugreifen können soll, bleibt schleierhaft und alle bisherigen Versuche scheiterten mit unverständlichen Fehlermeldungen.
Der zitierte Webseiten-Autor lässt nämlich leider etwas aus:
Code:
:: nur der Dateiname (ohne .ext) - die Option "~n" (Name der Datei oder des Ordners) wird angesprochen, %% weil Ausführung aus einem Script heraus, a am Ende ist das Element der for Schleife
for %%a in (%path%) do set 1=%%~na
:: -> test
-> Wie gibt man "test" konkret aus ("echo 1"?), und wie extrahiert man mehrere Teile des Dateistrings in einer Schleife?
- - - Beitrag zusammengeführt - - -
Hier mein neuer Zwischenstand:
Code:
for /R "D:\Archiv\Unterordner" %%i in (*.txt) do (
set %%p=%%~dpi
set %%d=%%~ni
set %%e=%%~xi
echo %%i
echo Pfad: %%p
echo Dateiname: %%d
echo Extension: %%e
)
Beispielausgabe:
Code:
D:\Archiv\Unterordner\beispiel.txt
Pfad: %p
Dateiname: %d
Extension: %e
D.h. die drei Einzelbestandteile des Dateipfades lassen sich irgendwie einfach nicht extrahieren, statt derer wird nur "%p" usw. ausgegeben (was eigentlich als Variable mit entsprechendem Inhalt gedacht war). Was mache ich als zugegebenermaßen BATCH-Laie falsch, oder geht es doch gar nicht? Liegt es vielleicht an den für mich noch völlig unklaren %-Zeichen, d.h. wann schreibt man zwei vor eine Variable, wann nur eins, und wann eins davor und eins danach?
- - - Beitrag zusammengeführt - - -
PHP ist wirklich ein Traum gegenüber Batch-Programmierung...
So kommen wenigstens keine Syntax-Errors mehr:
Code:
for /R "D:\Archiv\Unterordner" %%i in (*.txt) do (
echo %%i
set p=%%~dpi
echo Pfad: %p%
set d=%%~ni
echo Dateiname: %d%
set e=%%~xi
echo Extension: %e%
)
Allerdings werden die Variablen p, d und e erst NACH Ende der Schleife neu belegt (mit den Werten des letzten Durchlaufes). Beim ersten Aufruf des Batch sind sie stets leer, bei einem erneuten Aufruf haben sie in jedem Durchlauf den Wert des letzten Durchlaufes des vorherigen Batch-Aufrufes. Scheinbar können in Batch-Schleifen keine zusätzlichen Variablen belegt werden als die in der FOR-Zeile (%%i ist als einzige stets korrekt und aktuell).
- - - Beitrag zusammengeführt - - -
Jetzt hab ichs: Batch ist wirklich sehr einfach gestrickt und ersetzt Zeichenketten wie %variable1% in Schleifen schon VOR Durchlauf der Schleife durch den dann gültigen Wert, d.h. vor dem ersten Durchlauf ist die Variable dann ohne vorherige Belegung leer, und beim zweiten Aufruf des Batchfiles enthält sie noch den Wert vom letzten Schleifendurchlauf des letzten Batchfile-Aufrufes.
Wie folgt funktioniert es daher (Verzicht auf innerhalb der Schleife neu belegte Variablen):
Code:
for /R "D:\Archiv\Unterordner" %%i in (*.txt) do (
echo %%i
echo Pfad: %%~dpi
echo Dateiname: %%~ni
echo Extension: %%~xi
)