2016-09-01 23 views
1

残るためにバッチスクリプトを作成しようとしていますWindowsマシンに残ります。指定された条件に基づいて、利用可能なメモリが指定された制限値を下回る場合、タスクマネージャを開くオプションが与えられます。 条件が満たされても、出力には常にelseが表示されます。両方向に進む可能性があるため、出力が予測できなくなることがあります。バッチスクリプトが正しい条件を選択していません

希望の出力を得るために必要な変更を提案してください。

@echo off 
mode con:cols=55 lines=8 
for /f "skip=1" %%p in ('wmic os get freephysicalmemory') do (set m=%%p 
goto :done) 

:done 
set /a FreeMem = %m%/1000 
if %FreeMem% LEQ "900"(goto :error) ELSE (goto :go) 

:go 
COLOR 2F 
echo Hi %username%! 
echo Remaining Free Memory is ---%FreeMem% MB--- 
echo It's safe to go ahead! 
goto :cont 

:error 
COLOR 4F 
echo Hey %username%! 
echo Remaining Free Memory is ONLY --- %FreeMem% MB--- 
echo It's not safe to go ahead! 
goto :ask 

:ask 
echo Do you want me to open Task Manager for you? (y/n) 
set INPUT= 
set /p INPUT=Type input: %=% 
If /I "%INPUT%"=="y" goto :yes 
If /I "%INPUT%" =="n" goto :no 
echo Incorrect Input & goto :ask 

:yes 
TASKMGR 
goto cont 

:no 
echo AS you Wish! 
goto cont 

:cont 
pause 
+0

。私はthoを確信していません。それを確認したいかもしれません。それは完璧にあなたの記述に合っているでしょう。 '' *コメント*は安全ではない[...] ' 「ハイ[...] NOT safe'? これは問題ではない場合は、他のエラーをチェックする条件になる前に '%FreeMem% 'の値をエコーし​​たい場合があります。 – geisterfurz007

+0

"残りの物理メモリ"はどのように定義しますか? ;)また、質問はPoShに関連していないようです –

答えて

2

メモリ番号の前後の引用符を削除する必要があります。数字の代わりに文字列として読み込まれています。だから私はあなたのコードの大部分をコメントしていること、言うの色編集に基づいて

if %FreeMem% LEQ 900 (goto :error) ELSE (goto :go) 

代わりの

if %FreeMem% LEQ "900" (goto :error) ELSE (goto :go) 
+1

あなたは900とかっこの間にスペースが必要です。 – Squashman

+0

しかし、それは私のために働いていましたが、なぜ出力が急で、時には 'if'で宣言された色が 'else'で示されていても、逆もまた同様です。 (私は数値列の複雑さではっきりしていますが、色が交換されている間にフローを知りたいと思います!) –

関連する問題