quba
Goto Top

SET funktioniert in FOR Schleife nicht

Hallo zusammen,

ich ich glaube ich stehe auf dem Schlauch face-smile
Folgendes:
Ich versuche aus einem Ordner die Datei die dort steht mit einer FOR /F auszulesen und in eine
Variable zu schreiben um diese (Dateiname) danach weiter zu verwenden:

for /f "delims=" %%i in ('dir /b %workpath%') DO @set pdf=%%i

Mit echo %pdf% kann ich mir anschauen, dass der Dateiname der Variable korrekt zugewiesen wurde.

Führe ich die Batch aus funktioniert alles.

Rufe ich die Batch über die Geplanten Tasks auf funktioniert es nicht.
Der Variable wird kein Wert zugewiesen.

Hat jemand eine Idee?

Danke und Gruß
quba

Content-ID: 149797

Url: https://administrator.de/forum/set-funktioniert-in-for-schleife-nicht-149797.html

Ausgedruckt am: 23.12.2024 um 09:12 Uhr

Biber
Biber 26.08.2010 um 15:36:03 Uhr
Goto Top
Moin Quba,

gib doch mal in der Zeile VOR dem FOR-Geraffel einfach ein:
@echo Batch-durchnudelnder Benutzer: [%username%] und dessen Variable Workdir [%workdir%]

Ab dem Punkt dann stehe ich für verbleibende Fragen zur Verfügung. face-wink

Grüße
Biber
quba
quba 26.08.2010 um 15:49:18 Uhr
Goto Top
Tach auch,

da es in einer neuen Datei, in der nur diese eine Zeile steht funktioniert,
habe ich ein wenig getestet.

Was ich nicht erwähnt habe: Die FOR Schleife ist in einer IF EXIST Schleife
Eigentlich dachte ich dies macht nichts aus, aber wenn ich die FOR außerhalb der IF
laufen lasse, dann tut alles. Innerhalb der IF tut es nicht.
Zumindest nicht über geplante Tasks, wenn ich von Hand aufrufe, dann gehts auch.

Ich versteh das nicht.....

grüße
quba
60730
60730 26.08.2010 um 16:05:42 Uhr
Goto Top
Moin,

naja wenn das was nicht exististiert auch nicht existiert, dann findet der if exist auch keinen Grund dich ins innere zu lotsen.

Ich versteh das nicht.....
Ich auch nicht - du willst doch Hilfe, warum dann so schüchtern mit deiner Batch?

Gruß
quba
quba 26.08.2010 um 16:19:01 Uhr
Goto Top
Doch in die IF Exist springt er rein.

Hier mal ein Auszug mit dem ich Probleme hab


if exist "%workpath%\*.pdf" (
for /f "delims=" %%i in ('dir /b %workpath%') DO @set pdf=%%i
@echo %pdf% > c:\log.txt
)

Wie erwähnt %pdf% hat keinen Wert zugewiesen.
In der log.txt müsste dann der Dateiname stehen, aber ich sehe nur "ECHO ON" da
ja die Variable wohl leer ist...

LG
Biber
Biber 26.08.2010 um 16:47:18 Uhr
Goto Top
Moin quba,

gestern in einer Frage von jonny83 hatten wir Ähnliches.

Kurzfassung:
  • Vom Wort "IF" bis zum letzten "RundeKlammerZu" ist es EINE Befehlszeile
  • In EINER Befehlszeile werden alle %Variablen% EINMAL aufgelöst ...vor Beginn des erstens Zeichens der Befehlszeile.
  • Abhilfe siehe im Beitrag von jonny83

--> oder aber in Deinem Fall:
Verlege das @echo %pdf% etwas tiefer auf die Zeile NACH der "RundeKlammerZu"-Zeile.

Grüße
Biber
quba
quba 26.08.2010 um 17:04:07 Uhr
Goto Top
Hey Biber,

man lernt nie aus...
Danke dir der Beitrag bzw. dein Kommentar bei jonny83 hat mir wirklich sehr weiter geholfen.
Des Rätsels Lösung Setlocal EnableDelayedExpansion und die Variable mit !pdf!

Einfach genial!

Danke und einen schönen Tag

quba