Batch datei spuckt nach for f in der for l schleife nicht die varbiablen aus!
Ich wende mich wieder an die community, weil ich weiß, dass ich hier sicher eine antowort bekommen! Diesmal habe ich schon einen Quelltext nur irgendwas funktioniert nicht wie immer...
Hallo! Also ich versuche alle dateien in einem verzeichnis umzubenennen und zwar indem ich die " " (leerschritte) in den dateinamen durch "_" ersetze.
ich dachte mir, zuerst einmal die liste in eine datei schreiben, die namen als variable festlegen und den leerschirtt durch einen unterstrich ersetzen und in eine zweite datei schreiben. das funktioniert noch super. wenn ich die datei anschaue ist alles super.
so dann will ich mit einer for /f die zweite liste wieder in variable speichern. geht auch noch. doch der letzte schritt ist irgendwo fehlerhaft.
hier ist, was ausgespuckt wird:
wie kann ich das problem beheben??
MFG alexander
Hallo! Also ich versuche alle dateien in einem verzeichnis umzubenennen und zwar indem ich die " " (leerschritte) in den dateinamen durch "_" ersetze.
ich dachte mir, zuerst einmal die liste in eine datei schreiben, die namen als variable festlegen und den leerschirtt durch einen unterstrich ersetzen und in eine zweite datei schreiben. das funktioniert noch super. wenn ich die datei anschaue ist alles super.
so dann will ich mit einer for /f die zweite liste wieder in variable speichern. geht auch noch. doch der letzte schritt ist irgendwo fehlerhaft.
dir /b *.txt>>list.tmp
for /f "delims=: tokens=1,2*" %%a in ('findstr /n . "list.tmp"') do (set znt=%%a
set list%%a=%%b
setlocal enabledelayedexpansion
echo !list2%%a: =^_!>>list2.tmp
endlocal
)
for /f "delims=: tokens=1,2*" %%a in ('findstr /n . "list.tmp"') do (set list2%%a=%%b)
for /l %%a in (1, 1, %znt%) do (ren %%list%%a%% %%list2%%a%%)
hier ist, was ausgespuckt wird:
C:\Users\grandits\Desktop\Batch>2
C:\Users\grandits\Desktop\Batch>dir /b *.txt 1>>list.tmp
C:\Users\grandits\Desktop\Batch>for /F "delims=: tokens=1,2*" %a in ('findstr /n
. "list.tmp"') do (
set znt=%a
set list%a=%b
setlocal enabledelayedexpansion
echo !list2%a: =_! 1>>list2.tmp
endlocal
)
C:\Users\grandits\Desktop\Batch>(
set znt=1
set list1=Merle Haggard.txt
setlocal enabledelayedexpansion
echo !list21: =_! 1>>list2.tmp
endlocal
)
C:\Users\grandits\Desktop\Batch>for /F "delims=: tokens=1,2*" %a in ('findstr /n
. "list2.tmp"') do (set list2%a=%b )
C:\Users\grandits\Desktop\Batch>(set list21=Merle_Haggard.txt)
C:\Users\grandits\Desktop\Batch>for /L %a in (1 1 1) do (ren %list%a% %list2%a%
)
C:\Users\grandits\Desktop\Batch>(ren %list1% %list21% )
Das System kann die angegebene Datei nicht finden.
wie kann ich das problem beheben??
MFG alexander
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 17.08.2010 um 16:53:23 Uhr
Zitat von @Daffman: am 17.08.2010, 13:00:31 Uhr
das mit dem umbenennten funktioniert in die eine richtung, aber ...
Set /a rgc+=1das mit dem umbenennten funktioniert in die eine richtung, aber ...
#698
Content-ID: 149042
Url: https://administrator.de/forum/batch-datei-spuckt-nach-for-f-in-der-for-l-schleife-nicht-die-varbiablen-aus-149042.html
Ausgedruckt am: 13.05.2025 um 03:05 Uhr
9 Kommentare
Neuester Kommentar
Hallo Daffman!
Sollte einfacher gehen:
Wenn's passt, das "
Falls es tatsächlich keine "!" in den Dateinamen gibt, sollte auch
genügen (beides ungetestet) ...
Und wenn Du eine Liste der umbenannten Dateien brauchst, dann eben an passender Stelle ein
einbauen.
Grüße
bastla
Sollte einfacher gehen:
@echo off & setlocal
pushd "D:\Verzeichnis mit den umzubenennenden Dateien"
for /f "delims=" %%i in ('dir /b /a-d "* *.*" 2^>nul') do set "Datei=%%i" & call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
echo ren %1 "%Datei: =_%"
goto :eof
echo
" vor dem "ren
" entfernen.Falls es tatsächlich keine "!" in den Dateinamen gibt, sollte auch
@echo off & setlocal enabledelayedexpansion
pushd "D:\Verzeichnis mit den umzubenennenden Dateien"
for /f "delims=" %%i in ('dir /b /a-d "* *.*" 2^>nul') do set "Datei=%%i" & echo ren "%%i" "!Datei: =_!"
popd
Und wenn Du eine Liste der umbenannten Dateien brauchst, dann eben an passender Stelle ein
>>D:\Umbenannt.txt echo %%i
Grüße
bastla
Hallo Daffman!
Variablen sind zumeist sinnvoll - Deine Zeile 3 macht den Vorteil aber wieder zunichte, da Du eine Konstante (12) verwendest; deshalb die Frage, "wohin" Du damit willst.
Da in diesem Fall die Variable nur ein einziges Mal (für den Verzeichniswechsel mit "
Wenn Du mehrere Ersetzungen benötigst könnte das so aussehen:
Grüße
bastla
Variablen sind zumeist sinnvoll - Deine Zeile 3 macht den Vorteil aber wieder zunichte, da Du eine Konstante (12) verwendest; deshalb die Frage, "wohin" Du damit willst.
Da in diesem Fall die Variable nur ein einziges Mal (für den Verzeichniswechsel mit "
pushd
") verwendet wird, könntest Du allerdings den Pfad auch einfach in Zeile 4 angeben. Für den Spezialfall, dass Du das "Eltern-Verzeichnis" ansteuern willst, genügt dann tatsächlich ein "pushd ..
" ...Wenn Du mehrere Ersetzungen benötigst könnte das so aussehen:
set "Datei=%Datei: =_%"
set "Datei=%Datei:'ve= have%"
set "Datei=%Datei:ü=³%"
ren %1 "%Datei%"
bastla
Hallo Daffman!
Abgesehen vom fehlenden Anführungszeichen in der Zeile 8 sorgt das "optimierte" (hatte ich oben nicht erwähnt)
dafür, dass nur Dateien mit Leerzeichen im Namen gesucht werden - solche gibt's aber nicht mehr ...
... daher sollte es mit dieser Zeile 3 dann klappen:
Grüße
bastla
Abgesehen vom fehlenden Anführungszeichen in der Zeile 8 sorgt das "optimierte" (hatte ich oben nicht erwähnt)
dir "* *.*"
... daher sollte es mit dieser Zeile 3 dann klappen:
for /f "delims=" %%i in ('dir /b /a-d 2^>nul') do set "Datei=%%i" & call :ProcessFile "%%i"
bastla