BATCH In einer For-Schleife die Anzahl der durchlaufe und das Ende anzeigen lasse.
Guten Abend,
ich bin gerade dabei mir eine weitere Arbeitserleichterung zu Programmieren.
Bis jetzt hatte ich keine schwierigkeiten, bei den ersten 100 Zeilen, aber nun ist
ein Problem aufgetreten das ich nicht Lösen kan.
Hier die stelle die Probleme bereitet: (In einer beispiel Testdatei zu versuchs zwecken)
Leider benennt es die Dateien nicht nach der Reihe um.
Es erzeugt lediglich diese Ausgabe:
In der Datei "tempren.txt" steht sowas wie: "C:\Test\Datei1.txt" "001 2013.02.15.txt"
Außerdem noch eine kleinigkeit die mir aufgefallen ist.
Früher hatte Windows ja diese bescheurte Dateien sortierung, die so war:
Neuerdings ist die Sortierung in dem Explorer richtig, also:
aber in CMD mit 'dir /a-s-d-h /b' bekomme ich immer noch die alte Sortierung.
Wann wurde das geändert und wiso nicht im CMD?
Wie kan ich in CMD die Liste so konvertieren, dass sie so wie im Explorer ist?
ich bin gerade dabei mir eine weitere Arbeitserleichterung zu Programmieren.
Bis jetzt hatte ich keine schwierigkeiten, bei den ersten 100 Zeilen, aber nun ist
ein Problem aufgetreten das ich nicht Lösen kan.
Hier die stelle die Probleme bereitet: (In einer beispiel Testdatei zu versuchs zwecken)
rem /---- Dem Programm erteilte oder errechnete Parameter ----/
set "Path=C:\Test"
set /a "Count1=1001"
set /a "Count2=1020"
rem /---------------------------------------------------------/
for /F "delims=" %%r in ("%TEMP%\tempren.txt") do (
set "ln=%%r" && call :Rename && timeout /T 1 >NUL
)
pause
:Rename
ren %ln%
CLS
echo Pfad: %Path%
echo.
echo.
echo ------ %Count1:~-3% von %Count2:~-3% ------
echo.
set /a "Count1=%Count1%+1"
exit /b 0
Leider benennt es die Dateien nicht nach der Reihe um.
Es erzeugt lediglich diese Ausgabe:
Pfad: C:\Test
------ 001 von 020 ------
Der Befehl "timeout" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Drücken Sie eine beliebige Taste . . .
In der Datei "tempren.txt" steht sowas wie: "C:\Test\Datei1.txt" "001 2013.02.15.txt"
Außerdem noch eine kleinigkeit die mir aufgefallen ist.
Früher hatte Windows ja diese bescheurte Dateien sortierung, die so war:
1.txt
10.txt
11.txt
...
2.txt
20.txt
21.txt
...
Neuerdings ist die Sortierung in dem Explorer richtig, also:
1.txt
2.txt
...
10.txt
11.txt
...
20.txt
21.txt
...
aber in CMD mit 'dir /a-s-d-h /b' bekomme ich immer noch die alte Sortierung.
Wann wurde das geändert und wiso nicht im CMD?
Wie kan ich in CMD die Liste so konvertieren, dass sie so wie im Explorer ist?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 201830
Url: https://administrator.de/forum/batch-in-einer-for-schleife-die-anzahl-der-durchlaufe-und-das-ende-anzeigen-lasse-201830.html
Ausgedruckt am: 26.12.2024 um 00:12 Uhr
12 Kommentare
Neuester Kommentar
Hallo Darkprodukt!
Es ist keine gute Idee, Systemvariablen mit eigenen Werten zu überschreiben - wenn Du also "%Path%" auf "C:\Test" setzt, ist es nicht verwunderlich, dass die "timeout.exe" nicht gefunden wird - daher eine andere Variable anstatt "%Path%" verwenden ...
Im Zweifelsfall würde ich übrigens eher
und im Unterprogramm
schreiben.
BTW:
ließe sich auch so formulieren:
Damit funktioniert das Zählen (für das Ausgeben wäre trotzdem "
Grüße
bastla
P.S.:
Es ist keine gute Idee, Systemvariablen mit eigenen Werten zu überschreiben - wenn Du also "%Path%" auf "C:\Test" setzt, ist es nicht verwunderlich, dass die "timeout.exe" nicht gefunden wird - daher eine andere Variable anstatt "%Path%" verwenden ...
Wie kan ich in CMD die Liste so konvertieren, dass sie so wie im Explorer ist?
Eigentlich nur, indem Du führende Nullen verwendest und die Dateien daher "0001.txt", "0002.txt" etc nennst.Im Zweifelsfall würde ich übrigens eher
for /F "delims=" %%r in ("%TEMP%\tempren.txt") do call :Rename %%r & timeout /T 1 >NUL
ren %1 %2
BTW:
set /a "Count1=%Count1%+1"
set /a Count1+=1
delayedexpansion
" erforderlich) auch innerhalb einer Schleife.Grüße
bastla
P.S.:
Guten Abend,
In welcher Zeitzone bist Du denn gerade?
Hallo Darkprodukt!
So sollte das besser gehen:
Grüße
bastla
So sollte das besser gehen:
@echo off & setlocal
set "Bearbeitungspfad=C:\Test"
set /a "Count1=1001"
set /a "Count2=1020"
for /F "usebackq delims=" %%r in ("%TEMP%\tempren.txt") do (
call :Rename %%r & REM timeout /T 1 >NUL
set /a Count1+=1
)
goto :eof
:Rename
echo ren %1 %2
echo Pfad: %Bearbeitungspfad%
echo.
echo.
echo ------ %Count1:~-3% von %Count2:~-3% ------
echo.
goto :eof
bastla
Hallo Darkprodukt!
Grüße
bastla
Hab in der for schleife einfach: in ('type "%TEMP%\tempren.txt"') do ... verwendet.
Auch eine Möglichkeit - meinen Vorschlag mit "usebackq
" hattest Du ja offensichtlich ignoriert.Das mit der falschen sortierung, würde ich gerne umgehen, aber wie?
Wenn auch hier mein Ansatz (von ganz oben) für Dich nicht passt, habe ich leider keine weitere Idee ...Grüße
bastla