Batch Ausgabe von Variablen innerhalb einer for Schleife funktioniert nicht

epytir

Newbie
Registriert
Juni 2014
Beiträge
7
Hey Community,
ich habe mit einem Problem in meinem Script zu kämpfen innerhalb meines Loops lassen sich die Variablen Festplattenplatz und groesse nicht ausgeben. Sobald ich die Schleife verlasse funktioniert die Ausgabe ich brauche die Werte aber in der Schleife....
Ich weiß das man innerhalb von Loops nicht mit %variable% arbeiten kann aber mit den !variable! sollte es doch gehen...

Hier der batch Code:
Code:
SET Quelle=D:\Bilder\bilder
SET Ziel=D:\Bilder\bilder\tester
SET Kopierpfad=D:\Bilder\bilder\tester

SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F "usebackq tokens=*" %%i IN (`DIR %Quelle% /A:-D /B`) DO (
SET Datei=%%i
for /f "tokens=3" %%i in ('dir D: /-c') do set Festplattenplatz=%%i
for %%F in (%Quelle%\%%i) do set groesse=%%~zF
echo !Festplattenplatz!
echo !groesse!
)
echo %Festplattenplatz%
echo %groesse%

Ich hoffe jemand kann mir helfen.
Das Script ist noch nicht fertig deswegen stehen oben noch 2 Pfade die nicht genutzt werden im Loop sollen 2 Funktionen gecallt werden je nachdem ob der Festplattenplatz für die Datei reicht oder nicht. Die Funktionen sind fertig und getestet nur ohne Variablen kann ich meine if Festplattenplatz GTR groesse call Test funktion nicht aufrufen :(
Gruß Epytir
 
Zuletzt bearbeitet:
NJa das batch Script hat ja nur 1 Problem das die Variablen in der Schleife nicht auslesbar sind .. warum auch immer ich würde ungern jetzt das gesamte Script anpassen.
Weiß keiner eine Lösung warum ich die Variablen nicht auslesen kann .. :(
 
Leider habe ich dein Script nicht vollständig verstanden. Vielleicht hilft dir mein Lösungsansatzt weiter.

SET Quelle=D:\Bilder\bilder
SET ZielLW=D:
SET Ziel=D:\Bilder\bilder\tester


for %%i IN (%Quelle%\*.*) DO (

set groesse=%%~zi

for /f "tokens=2 delims==" %%f in ('wmic logicaldisk where "DeviceID='%ZielLW%'" get FreeSpace /value') do set Festplattenplatz=%%f

if %groesse% LSS %Festplattenplatz% copy "%%i" "%Ziel%"
)
 
Also bei mir gibt er nach der Schleife die Dateigröße und Festplattengröße schon aus aber in der Schleife kann sind die Variablen laut cout leer.

Kurz zum Verständnis ich muss Backups die mit Symantec gemacht wurden auf Bandlauferke kopieren immer wenn eine Kassete voll ist soll er sie auswerfen und ein Mitarbeiter steckt die nächste Kassette rein und startet das Script erneut.

Das heißt das ich einen Vergleich mache :
Code:
if %Festplattenplatz% GTR %groesse% (CALL :Dateipasst)
if %Festplattenplatz% LSS %groesse% (CALL :Plattevoll)
Also wenn die Datei noch passt soll er sie kopieren wenn nicht CALLT er Platte voll und die Kassette wird ausgeworfen.
Leider funktioniert mein Vergleich nicht da weder groesse noch Festplattenplatz einen Wert enthalten solange sich das Programm in der for schleife befindet.
Das komische ist sobald die Schleife vorbei ist hat groesse die Dateigröße der letzten Datei die im Ordner ist und Festplattenplatz hat auch den Festplattenplatz also irgendwie kann ich die Werte nicht in der Schleife auslesen

Zu Der Tiger
Ja am Ende gibt er es aus aber in der Schleife wenn ich meinen (ja habs erst jetzt erwähnt) Vergleich mache bekomme ich :
if !Festplattenplatz! GTR !groesse! (CALL : Dateipasst) <--- genau das wieder ausgegeben ohne eingesetzte Werte
und mit :
if %Festplattenplatz% GTR %groesse% (CALL : Dateipasst) <------ bekomme ich if GTR (CALL : Dateipasst)
also ganz ohne Werte :(

Zu bauers:
Deine möglichkeit hat leider bei mir auch nicht funktioniert genau der selbe Fehler wie bei Zu Der Tiger beschrieben bin echt am verzweifeln :(

Gruß Epytir und danke schonmal für die hilfen :)
 
Zuletzt bearbeitet:
Hmm, weiß nich obs hilft, aber probier mal um deine ganzen DO's ein paar klammern zu setzen um das besser zu gliedern.
vllt liegt da der fehler. :freak:
 
Sorry das ich mich erst jetzt melde hier die Lösung :)
:start
copy "C:\Users\Public\Pictures\Sample Pictures\*.*" NUL
if errorlevel 1 goto End


for /f "tokens=3" %%i in ('dir C: /-c') do set Festplattenplatz=%%i
for /F "tokens=*" %%f in ('dir /b %Quelle%\*.*') do set AKTJOB=%%f
for %%F in (%Quelle%\%AKTJOB%) do set groesse=%%~zF

if %Festplattenplatz% GTR %groesse% (CALL :Dateipasst)
if %Festplattenplatz% LSS %groesse% (CALL :Plattevoll)
goto start


An Der Tiger mit den klammern hatte ich auch Probleme aber hab jetzt die Schleife anders gestaltet jetzt gehts :D
Gruß Epytir und danke euch
 
Zurück
Oben