imsvoigt
Goto Top

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

		
@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

Content-Key: 110566

Url: https://administrator.de/contentid/110566

Ausgedruckt am: 28.03.2024 um 13:03 Uhr

Mitglied: bastla
bastla 05.03.2009 um 01:38:30 Uhr
Goto Top
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:
@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
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
set /p Zeile=<"%%i"
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]
Mitglied: imsvoigt
imsvoigt 05.03.2009 um 10:41:42 Uhr
Goto Top
Hallo bastla,

Danke für deine Hilfe. Du hast trotz meiner schwammigen beschreibung genau das geschaft was ich noch brauchte.
Die vielen sinnlosen Bausteine haben sich so im probieren angesammelt. ... naja . Ich habe nun das ganze soweit bereinigt und den "\" am ende der Variabe noch entfernt.
Die Routine koppiert nun munter alle Dateien mit dem Namen aus der Zeile und achtet auf die punktversion.

Hier nochmal der Code fürs archiv.
Danke und viele Grüße
imsvoigt

@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 "Wert=%Wert: =%"  
set "Wert=%Wert:\=%"  
set /a Version=1
:Loop
if not exist %Wert%.%Version% goto :DoIt
set /a Version+=1
goto :Loop

:DoIt
copy %1 %Wert%.%Version%
goto :eof