Cmd If ()else(if) geht nicht
Hallo Leute,
ich habe mir ein kleines Script erstellt welches den PC herunterfährt wenn er 90 Minuten im Leerlauf ist UND ein bestimmter Ordner leer ist. Bekomme nun aber immer einen Fehler wenn ich beide Bedingungen erfüllt haben will. Einzeln funktionieren beide...
Es sieht so aus:
wenn ich nun in einer batch nur das habe funktioniert es....
if %cridle% GTR %idle%
shutdown -s -t 0
) else (
timeout 10
goto mpun
) (Natürlich werden vorher beide variablen genauso gesetzt wie oben)
Wieso klappt das nicht? hatte auch schon:
) elseif %cridle% GTR %idle% (.....
Das geht auch nicht....
1. Warum klappt das nicht?
2. Warum zeigt quser nicht mehr die leerlaufzeit an (es steht leerlaufzeit dort, ist aber seit systemstart)
Bin dankbar für jeden Tipp
Mit freundlichen Grüßen
Sascha
[Edit Biber] Codeformatierung, weil sonst keine Chance auf sinnvolle Hinweise. [/Edit]
ich habe mir ein kleines Script erstellt welches den PC herunterfährt wenn er 90 Minuten im Leerlauf ist UND ein bestimmter Ordner leer ist. Bekomme nun aber immer einen Fehler wenn ich beide Bedingungen erfüllt haben will. Einzeln funktionieren beide...
Es sieht so aus:
@echo off
FOR /F "tokens=5 delims=^ " %%a IN ('quser ^| find ^"^>^"') do @set va=%%a
FOR /F "tokens=1 delims=^+" %%a IN ("%va%") do @set /A vt=%%a
FOR /F "tokens=2 delims=^+" %%a IN ("%va%") do @set vg=%%a
FOR /F "tokens=1 delims=^:" %%a IN ("%vg%") do @set /A vh=%%a
FOR /F "tokens=2 delims=^:" %%a IN ("%vg%") do @set /A vm=%%a
set /A vt=%vt%*1440
set /A vh=%vh%*60
set /A idle=%vt%+%vh%+%vm%+90 (Hier wird die Zeit seit einschalten des PC + 90 minuten in eine Variable gesetzt. Normalerweise sollte quser die idle zeit angeben, unter win10 bei mir komischerweise ist es die zeit seit systemstart....)
:mpun
.
. (unerheblich, das kann ich garantieren)
.
for /f %%k IN ('dir "D:\Downloads\extracted\d\VideoQueue" /b /s /A-D ^| find /c /v ""') do @( (Hier springt er raus wenn die untere if %cridle% GTR %idle% drinnen ist, ohne die gehts)
if %%k GTR 0 (
timeout 10
goto mpun
) else (
timeout 30
for /f %%m IN ('dir "D:\Downloads\extracted\d\VideoQueue" /b /s /A-D ^| find /c /v ""') DO @(
FOR /F "tokens=5 delims=^ " %%a IN ('quser ^| find ^"^>^"') do @set va=%%a
FOR /F "tokens=1 delims=^+" %%a IN ("%va%") do @set /A vt=%%a
FOR /F "tokens=2 delims=^+" %%a IN ("%va%") do @set vg=%%a
FOR /F "tokens=1 delims=^:" %%a IN ("%vg%") do @set /A vh=%%a
FOR /F "tokens=2 delims=^:" %%a IN ("%vg%") do @set /A vm=%%a
set /A vt=%vt%*1440
set /A vh=%vh%*60
set /A cridle=%vt%+%vh%+%vm%
if %%m GTR 0 (
timeout 10
goto mpun
) else (
if %cridle% GTR %idle% ( ----------------(das hier sorgt für den Fehler, Rausspringen tut er aber oben....)
shutdown -s -t 0
) else (
timeout 10
goto mpun
)
)
)
)
)
if %cridle% GTR %idle%
shutdown -s -t 0
) else (
timeout 10
goto mpun
) (Natürlich werden vorher beide variablen genauso gesetzt wie oben)
Wieso klappt das nicht? hatte auch schon:
) elseif %cridle% GTR %idle% (.....
Das geht auch nicht....
1. Warum klappt das nicht?
2. Warum zeigt quser nicht mehr die leerlaufzeit an (es steht leerlaufzeit dort, ist aber seit systemstart)
Bin dankbar für jeden Tipp
Mit freundlichen Grüßen
Sascha
[Edit Biber] Codeformatierung, weil sonst keine Chance auf sinnvolle Hinweise. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 301514
Url: https://administrator.de/contentid/301514
Ausgedruckt am: 17.11.2024 um 21:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo Sascha,
dein Code ist aufgrund fehlender Codeformatierung und wahllos hineingeschriebener Kommentare unlesbar. Ich vermute folgendes:
Variablen werden in einer Kommandozeile oder in einem, in Klammern eingefassten, Block von Kommandozeilen, nur einmal zum Wert expandiert.
Beispiel:
Bei einer Variable, die vor dem Block nicht definiert war, expandiert die Variable zu "nichts", was bei einem Vergleich einen Syntaxfehler auslöst, da dann auf der Seite mit der Variable das == allein steht.
Abhilfe könnte die verzögerte Variablenerweiterung sein.
Besser wäre aber, gleich mit der FOR Variablen zu arbeiten.
Grüße
rubberman
dein Code ist aufgrund fehlender Codeformatierung und wahllos hineingeschriebener Kommentare unlesbar. Ich vermute folgendes:
Variablen werden in einer Kommandozeile oder in einem, in Klammern eingefassten, Block von Kommandozeilen, nur einmal zum Wert expandiert.
Beispiel:
@echo off &setlocal
set "x=0"
echo davor: %x%
for /l %%i in (1 1 3) do (
set "x=%%i"
echo im Block: %x%
)
echo danach: %x%
pause
Abhilfe könnte die verzögerte Variablenerweiterung sein.
@echo off &setlocal EnableDelayedExpansion
set "x=0"
echo davor: %x%
for /l %%i in (1 1 3) do (
set "x=%%i"
echo im Block: !x!
)
echo danach: %x%
pause
Grüße
rubberman