tranministrator
Goto Top

Windows Batch - Überprüfen und Überschreiben von Files mit For-Funktionen

Hallo zusammen,

habe momentan das Problem, dass folgender Code nur mit dem Abschluss der for-Funktion nach dem ersten Markensprung (goto EXISTIERT) funktioniert, jedoch nicht mit der Einbeziehung von allen Marken um eine geschlossene Wiederholung von 44x zu erziehlen. Zudem wird nach dem ersten Durchlauf nicht von oben erneut begonnen:


@echo off
setlocal enabledelayedexpansion


set ziel=Z:\test.txt
…
set ziel[43]=Z:\test43.txt
set backup=Z:\test_.txt
…
set backup[43]=Z:\test43_.txt


for /L %%i in (0,1,43) do (
	if exist !ziel[%%i]! goto EXISTIERT
	
	:EXISTIERT_NICHT
	echo Datei nicht gefunden!
	copy !backup[%%i]! !ziel[%%i]!
	goto ENDE

	:EXISTIERT
	echo Datei gefunden!

	:SUCHE_DATATYPE
        rem Stimmt die zweite Zeile überein?
	set var="DATATYPE=MSQL"  
	for /f "skip=1 tokens=1 delims=" %%j in (!ziel[%%i]!) do (  
		if "%%j"==%var% (  
			echo Ok!		
			goto ENDE
		)
		if NOT "%%j"==%var% (  
			echo Fehlerhaft!
			goto EXISTIERT_NICHT
		)
	)

	:ENDE
	pause
)

endlocal


Ich bin für jede Hilfe dankbar und bedanke mich vorab für jede Unterstützung!

LG,
Tranministrator

Content-ID: 388586

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

Penny.Cilin
Penny.Cilin 05.10.2018 um 15:43:43 Uhr
Goto Top
Hallo,

schau mal: Beim Editorfenster gibt es die Möglichkeit den Skriptcode in einem Codeblock zu setzen.
Das ist das Symbol links direkt über der Kamera.

Mache das bitte, damit ist Dein Skript besser lesbar.

Gruss Penny.
rubberman
rubberman 05.10.2018 um 18:30:52 Uhr
Goto Top
Du wirst deinen Code wohl umstricken müssen. GOTO und Labels in einer Schleife geht nicht. In einer Subroutine aber schon.
Bsp.
@echo off
for /l %%i in (0,1,43) do call :subroutine %%i
pause
exit /b

:subroutine
if %1 lss 20 (
  echo %1 ist kleiner als 20
) else (
  echo  %1 ist groesser oder gleich 20
)
exit /b

GOTO erzeugt unlesbaren Spaghetticode. Du solltest es meiden wie die Pest.

Steffen