Inkrementierung in For-Schleife bleibt aus
Hallo Leute, ich bin hier neu und ein batchnoob:
Die in einem gegebenen Verzeichnis vorhandenen .jpgs sollen fortlaufend und mit 1 beginnend umbenannt werden (1.jpg, 2.jpg, 3.jpg ...). dir /b im Testverzeichnis zeigt:
Da die Sache mit 'rename' das nächste Level zu sein scheint, wage ich mich vorerst an den aktuellen 'Endgegner': der Inkremator ;) - und beschränke mich auf 'echo':
das ergibt folgende Ausgabe:
Erkennbar ist, das die Formulierung soweit stimmt ( es werden 3 Dateien gefunden und der Pfad, der später in 'rename' verwendet werden soll, wird zusammen gesetzt - nur der Inhalt von 'Zaehler' nicht erhöht. Dies ist auch bei der Verwendung von Klammern im 'for' Teil der Fall.
Ginge es nur um wenige Dateien - es wäre närrisch diesen Aufwand zu betreiben. Aber ein häufig wiederkehrendes Aufkommen von mehreren hundert pics in einem Ordner ohne Unterverzeichnisse wollte ich eben auf diese Art lösen. Über Hinweise, auch hinsichtlich der Absicht, 'rename' mit diesem String-Ding zu füttern, wäre ich froh.
Viele Grüße
Die in einem gegebenen Verzeichnis vorhandenen .jpgs sollen fortlaufend und mit 1 beginnend umbenannt werden (1.jpg, 2.jpg, 3.jpg ...). dir /b im Testverzeichnis zeigt:
batch.bat
Hallo.jpg
Neues RTF-Dokument.rtf
Neues Textdokument.txt
OpenDocument Zeichnung (neu).odg
temp.txt
test_2.jpg
test_3.jpg
Da die Sache mit 'rename' das nächste Level zu sein scheint, wage ich mich vorerst an den aktuellen 'Endgegner': der Inkremator ;) - und beschränke mich auf 'echo':
@echo off
set /a zaehler=1
set pfad=%cd%
set suffix=.jpg
for /f "tokens=*" %%d in ('dir *jpg /b') do echo %pfad%\%zaehler%%suffix% & set /a zaehler=%zaehler%+1
pause
das ergibt folgende Ausgabe:
E:\test4Bat\1.jpg
E:\test4Bat\1.jpg
E:\test4Bat\1.jpg
Erkennbar ist, das die Formulierung soweit stimmt ( es werden 3 Dateien gefunden und der Pfad, der später in 'rename' verwendet werden soll, wird zusammen gesetzt - nur der Inhalt von 'Zaehler' nicht erhöht. Dies ist auch bei der Verwendung von Klammern im 'for' Teil der Fall.
Ginge es nur um wenige Dateien - es wäre närrisch diesen Aufwand zu betreiben. Aber ein häufig wiederkehrendes Aufkommen von mehreren hundert pics in einem Ordner ohne Unterverzeichnisse wollte ich eben auf diese Art lösen. Über Hinweise, auch hinsichtlich der Absicht, 'rename' mit diesem String-Ding zu füttern, wäre ich froh.
Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 208926
Url: https://administrator.de/forum/inkrementierung-in-for-schleife-bleibt-aus-208926.html
Ausgedruckt am: 19.04.2025 um 04:04 Uhr
11 Kommentare
Neuester Kommentar
Hallo StoppelHoppel, willkommen im Forum.
Du benötigst die "verzögerte Variablenerweiterung" um Änderungen innerhalb einer Kommandozeile oder eines Blocks greifbar zu machen.
Grüße
rubberman
EDIT: siehe bastla
Du benötigst die "verzögerte Variablenerweiterung" um Änderungen innerhalb einer Kommandozeile oder eines Blocks greifbar zu machen.
@echo off
set /a "zaehler=1"
set "pfad=%cd%"
set "suffix=.jpg"
for /f "delims=" %%d in ('dir *%suffix% /a-d /b') do (
set "file=%%d"
setlocal EnableDelayedExpansion
echo !file!
echo !pfad!\!zaehler!!suffix!
endlocal
set /a "zaehler += 1"
)
pause
Grüße
rubberman
EDIT: siehe bastla
Hallo StoppelHoppel!
Mit den Anführungszeichen werden Pfad-/Dateinamen mit enthaltenen Leerzeichen "zusammengehalten", da das Leerzeichen nicht nur (zusammen mit TAB) Default-Delimiter in der
Weiterer Vorteil der Verwendung von Anführungszeichen: Wie von rubberman auch schon angesprochen können so die Sonderzeichen "
Grüße
bastla
Bedeutet das ferner, dass mit dem Gebrauch von "" so etwas wie 'Syntaxsensitivität' hergestellt wird?
Den Begriff müsstest Du erst erklären ...Mit den Anführungszeichen werden Pfad-/Dateinamen mit enthaltenen Leerzeichen "zusammengehalten", da das Leerzeichen nicht nur (zusammen mit TAB) Default-Delimiter in der
for
-Schleife, sondern auch Trennzeichen zwischen Batch-Befehlen / -Argumenten ist.Weiterer Vorteil der Verwendung von Anführungszeichen: Wie von rubberman auch schon angesprochen können so die Sonderzeichen "
<|>&
" als "gewöhnliche" Zeichen in Strings ("&
" auch in Pfad-/Dateinamen) verwendet werden.Grüße
bastla