Batch Probleme mit Schleife, die eine Variable befüllt

Geeky26

Commander
Registriert
Jan. 2015
Beiträge
2.053
Ich versuche eine Schleife mit Werten zu befüllen, die aus einem Array kommen. Aber leider steht immer nur der zuletzt abgefragte Wert in der Variable. Woran kann das liegen? Bin in Batch echt nicht gut bewandert.

Code:
@echo off
set FILE_LIST=
setlocal enabledelayedexpansion
for %%s in ("A.txt" "B.txt") do (

  	CALL SET /p Q="Add %%s to list? (Y / N) "
  	IF /I "%Q%" EQU "Y" (
		if .!FILE_LIST!==. (
    			SET FILE_LIST=%%s
		) ELSE (
    			SET FILE_LIST=!FILE_LIST! %%s
		)
	)
	
)
set FILE_LIST=!FILE_LIST:~1!
echo !FILE_LIST!
endlocal

Gibt man bei beiden Fragen Y ein, erhält man ~1 als Resultat. Gewünscht ist aber "A.txt" "B.txt".
 
Zuletzt bearbeitet:
Die If-Abfrage unterscheidet klein und groß Buchstaben. Also Y drücken und nicht y.
Oder IF /I "%Q%" EQU "Y" OR "%Q%" EQU "y" abändern.
 
Auch bei groß geschriebenem Y bekomme ich leider nur ~ zurück.
Steht /I nicht für Ignore?
 
https://ss64.com/nt/if.html

/I -> Do a case Insensitive string comparison.

Mit der Zeile
Code:
set FILE_LIST=!FILE_LIST:~1!
löscht Du das erste Zeichen, welches bei Deinem String das Anführungszeichen ist. Du solltest also A.txt" "B.txt" als Ergebnis erhalten

Wenn Du alle Anführungszeichen entfernen willst, dann geht das mit
Code:
set FILE_LIST=!FILE_LIST:"=!
 
Zuletzt bearbeitet:
Das Problem ist, das in der Schleife nicht auf die Variable %Q% zugegriffen werden kann und diese immer leer ist.
Mit !Q! funktioniert das.

Code:
@echo off
set FILE_LIST=
setlocal enabledelayedexpansion
for %%s in ("A.txt" "B.txt") do (	
	SET Q=
	SET /p Q="Add %%s to list? (Y / N)"	
	IF /I "!Q!" EQU "Y" (
		if .!FILE_LIST!==. (			
			SET FILE_LIST=%%s
		) ELSE (			
			SET FILE_LIST=!FILE_LIST! %%s
		)
	)	
)
set FILE_LIST=!FILE_LIST:"=!
echo !FILE_LIST!
endlocal
 
Zuletzt bearbeitet:
Zurück
Oben