For for If Kombination
Hallo an alle,
Es ist nicht die feine Art mit fragen in ein Forum einzutreten doch ich komme gerade nicht weiter.
Hallo an alle,
Es ist nicht die feine Art mit fragen in ein Forum einzutreten doch ich komme gerade nicht weiter.
Ich habe einen Ordner mit Dateien die ich umbenennen möchte. Der zu verwendende Name steht in der jeweiligen datei.
der Name steht immer in der 10 Zeile ab dem 12 Zeichen bis zum ende der Zeile.
Ich lese momentan die Datei in eine Variable (ist aber gefährlich da die anzahl der gesamtzeichen bis Zeile 10 variiert.)
Besser ist denke ich die ganze Zeile einzulesen und dann die ersten Stellen abzuschneiden. (leider keine Ahnung wie)
2. Nun muss darauf geachtet werden das wenn die Datei bereits besteht eine .1 .. .2. .3 usw an Beispiel.txt angehangen wird --> beispiel.txt.1 bis viele
das hab ich mit goto Befehlen gemacht. Geht auch soweit. (wenn das besser geht dann auch gern anders)
Nun nach längern Erklärungen von Dingen die euch sowiso viel klarer sind als mir die eigentliche Frage.
Die bat läuft genauso wie sie soll, nur leider nur einmal. Die 1. for schleife scheint zu vergessen das sie noch nicht fertig ist und geht zum ende durch.
Kann das an dem Goto in der schleife liegen?
Ich sitze schon 2 Tage an der geschichte und bin gespannt was ihr sagt.
Viele Grüße
imsvoigt
Es ist nicht die feine Art mit fragen in ein Forum einzutreten doch ich komme gerade nicht weiter.
Hallo an alle,
Es ist nicht die feine Art mit fragen in ein Forum einzutreten doch ich komme gerade nicht weiter.
Ich habe einen Ordner mit Dateien die ich umbenennen möchte. Der zu verwendende Name steht in der jeweiligen datei.
der Name steht immer in der 10 Zeile ab dem 12 Zeichen bis zum ende der Zeile.
Ich lese momentan die Datei in eine Variable (ist aber gefährlich da die anzahl der gesamtzeichen bis Zeile 10 variiert.)
Besser ist denke ich die ganze Zeile einzulesen und dann die ersten Stellen abzuschneiden. (leider keine Ahnung wie)
2. Nun muss darauf geachtet werden das wenn die Datei bereits besteht eine .1 .. .2. .3 usw an Beispiel.txt angehangen wird --> beispiel.txt.1 bis viele
das hab ich mit goto Befehlen gemacht. Geht auch soweit. (wenn das besser geht dann auch gern anders)
Nun nach längern Erklärungen von Dingen die euch sowiso viel klarer sind als mir die eigentliche Frage.
Die bat läuft genauso wie sie soll, nur leider nur einmal. Die 1. for schleife scheint zu vergessen das sie noch nicht fertig ist und geht zum ende durch.
Kann das an dem Goto in der schleife liegen?
Ich sitze schon 2 Tage an der geschichte und bin gespannt was ihr sagt.
Viele Grüße
imsvoigt
@echo off & setlocal enabledelayedexpansion
set version=1
pushd
for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
set /p Zeile=<"%%i"
set "Wert=!Zeile:~635,35!
set tempor=%%i
echo %%i
goto versioncheck
:naechste
echo copy %%i !Wert!>> copy_me.bat
copy %tempor% %neu%.%version%
set version=1
)
popd
goto :eof
:weiter
goto versioncheck
:versioncheck
set neu=!wert!
set neu=%neu: =%
echo %neu%.%version%
if exist %neu%.%version% (set /a version+=1
echo weiter
goto weiter
)
goto OK
:OK
echo ende
echo die Datei braucht die Version %version%
goto naechste
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 110566
Url: https://administrator.de/forum/for-for-if-kombination-110566.html
Ausgedruckt am: 23.05.2025 um 16:05 Uhr
2 Kommentare
Neuester Kommentar
Hallo imsvoigt und willkommen im Forum!
Ein wenig wenig konkret ist Deine Beschreibung schon ...
... aber versuchen werde ich's trotzdem ...
Zunächst zu Deinem Code: Wenn Du das "goto versioncheck" durch ein "call versioncheck" ersetzt, sollte mehr als ein Durchlauf möglich sein.
Soweit ich das Ganze verstanden (bzw nachvollzogen) habe, wäre mein Ansatz etwa:
Den Sinn des Eintrages in die "copy_me.bat" kann ich allerdings gar nicht erkennen, und warum ein "copy" und kein "rename" stattfinden soll, ist mir auch nicht klar. Auch die Frage, wozu "pushd" und "popd" hier dienen sollten, konnte ich mir nicht beantworten.
Grüße
bastla
[Edit] Wenn
bei Dir funktioniert hat, enthält die Datei keine Windows-Zeilenschaltungen (CR/LF) - dann wird mein Ansatz, die Zeile 10 auszulesen, wohl nicht klappen ...
[/Edit]
Ein wenig wenig konkret ist Deine Beschreibung schon ...
... aber versuchen werde ich's trotzdem ...
Zunächst zu Deinem Code: Wenn Du das "goto versioncheck" durch ein "call versioncheck" ersetzt, sollte mehr als ein Durchlauf möglich sein.
Soweit ich das Ganze verstanden (bzw nachvollzogen) habe, wäre mein Ansatz etwa:
@echo off & setlocal
for /f "delims=" %%i in ('dir /b /a-d *.txt') do call :ProcessFile "%%i"
goto :eof
:ProcessFile
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" %1^|findstr /b "10:"') do set "Zeile=%%b"
set "Wert=%Zeile:~11%
set "Neu=%Wert: =%"
set /a Version=1
:Loop
if not exist %Neu%.%Version% goto :DoIt
set /a Version+=1
goto :Loop
:DoIt
echo die Datei braucht die Version %Version%
echo copy %1 %Wert%>>copy_me.bat
copy %1 %Neu%.%Version%
goto :eof
Grüße
bastla
[Edit] Wenn
set /p Zeile=<"%%i"
[/Edit]