Batch Variablen in FOR Schleife

2TAKTER

Lt. Junior Grade
Registriert
Okt. 2005
Beiträge
399
hallo,
ich habe einen ordner mit drei pdf-dateien
1.pdf
2.pdf
3.pdf

wenn ich nun eine schleife bastel um alle pdfs in dem ordner zu finden sieht es anfang ganz gut aus.

Code:
FOR %%d IN (*.pdf) DO (

SET PDFFILE=%%d

echo %PDFFILE%

)

wenn ich dies ausführe, passiert folgendes:

Code:
C:\dcmtk>PDF2DCM_FILE.bat

C:\dcmtk>FOR %d IN (*.pdf) DO (
SET PDFFILE=%d
 echo
)

C:\dcmtk>(
SET PDFFILE=1.pdf
 echo
)
ECHO is on.

C:\dcmtk>(
SET PDFFILE=2.pdf
 echo
)
ECHO is on.

C:\dcmtk>(
SET PDFFILE=3.pdf
 echo
)
ECHO is on.

wieso wird die variable PDFFILE nicht aktualisiert bzw ausgegeben?
 
Der Übersichtlichkeit würde ich mal
@echo off
am Beginn der Batch-Datei hinschreiben...

Und lies doch einfach mal die Hilfe zu "SET"

Da steht z.B.
set VAR=vorher
if "%VAR%" == "vorher" (
set VAR=nachher;
if "%VAR%" == "nachher" @echo Es funktioniert!
)

Die Meldung würde nie angezeigt, weil %VAR% in beiden IF-Befehlen
beim Lesen des ersten IF-Befehls erweitert wird, weil es logisch zu diesem
gehört. Daher vergleicht der zweite IF-Befehl "vorher" mit "nachher" was nie
gleich sein kann. Auch das folgende Beispiel funktioniert nicht wie erwartet:

set LISTE=
for %i in (*) do set LISTE=%LISTE% %i
echo %LISTE%

Es wird KEINE Liste der Dateien im aktuellen Verzeichnis erstellt, stattdessen
erhält LISTE den Namen der letzten Datei als Wert. Dies ist der Fall, weil
%LISTE% nur einmal beim Lesen des IF-Befehls erweitert wird. Zu diesem
Zeitpunkt ist LISTE leer.
Die FOR-Schleife, die tatsächlich ausgeführt wird, lautet:

for %i in (*) do set LISTE= %i

Hiermit wird der Variablen LISTE immer wieder der letzte Dateiname
zugewiesen.

Edit:
Das hier würde gehen, wenn es über eine Kommandozeile "CMD /V:ON" aufgerufen wurde
Code:
@echo off
FOR %%d IN (*.pdf) DO (
echo Laufvariable ist: %%d
SET PDFFILE=%%d

echo PDFFILE ist: !PDFFILE!

)

Stellt sich nur die Frage, warum du nicht einfach %%d verwendest statt %PDFFILE%...
 
Zuletzt bearbeitet:
nun das is nur ein beispiel gewesen für mein problem. das ganze verstrickt sich noch in einige unterschleifen etc wo dann das problem zum nächsten führt etc....

wie dem auch sei. wenn ich eine BATCH Datei nun schreibe und diese anschließend ausführe, wird sie ja leider nicht über CMD /V:ON aufgerufen
kann ich dies der batch am anfang mitteilen?

ah passt schon :)
@echo off & setlocal EnableDelayedExpansion
 
Zurück
Oben