2017-01-30 12 views
1

現在、私は現在、特定の日のある特定の時刻にユーザーのPCを自動的にシャットダウンするバッチファイルを作成中です。これまで私はこれを達成しました。今私は起動時に起動し、特定の値に達するまで続けるスタンドアロン版をコーディングしています。バッチファイル - 変数値の出力を防止する

:Loop 
for /f "tokens=1-3 delims=:,. " %%A in ("%time%") do (
set "Hour=%%A" 
set "Min=%%B" 

) 

set /a Hour = Hour %% 12 
if %Hour%==0 set "Hour=12" 
set "Allm=%Hour%:%Min%" 
echo %Allm% 
cls 
if %Allm% equ %_input% (goto:Continue) else goto:Loop 
IF %errorlevel% EQU 0 GOTO Loop 

:Continue 
for /f %%a in ('date /t') do set DAY=%%a 
IF %DAY% equ %S% (goto:shutdown) else goto:Loop 

:shutdown 
echo @echo off &setlocal >>PMLite.bat 
echo :Loop >>PMLite.bat 
echo for /f "tokens=1-3 delims=:,. " %%A in ("%time%") do (>>PMLite.bat 
echo set "Hour=%%A" >>PMLite.bat 
echo set "Hour=%%B" >>PMLite.bat 
echo echo. >>PMLite.bat 
echo) >>PMLite.bat 
echo echo. >>PMLite.bat 
echo set /a Hour = Hour %% 12 >>PMLite.bat 
echo if %Hour%==0 set "Hour=12" >>PMLite.bat 
echo echo. >>PMLite.bat 
echo set "Allm=%Hour%:%Min%" >>PMLite.bat 
echo echo. >>PMLite.bat 
echo echo %Allm% >>PMLite.bat 
echo IF %Allm%==9:20 GOTO timereached >>PMLite.bat 
echo IF %errorlevel% EQU 0 GOTO Loop >>PMLite.bat 
echo :timereached >>PMLite.bat 
echo for /f %%a in ('date /t') do set DAY=%%a >>PMLite.bat 
echo IF %DAY% equ %S% (goto:shutdown) else goto:Loop >>PMLite.bat 
echo :shutdown >>PMLite.bat 
echo pause >>PMLite.bat 
echo shutdown.exe -s -f -t 00 >>PMLite.bat 

私の主な目標は、プログラムがPCの現在の日付/時刻を監視し、「PMLite.bat」というバッチファイルのファイルを生成することです、ユーザーが作成した変数の値は、シャットダウンよりも満たしている場合、そのpc。具体的には、次のコードecho IF %errorlevel% EQU 0 GOTO Loop >>PMLite.batを持つ行#340に注意してください。時間がユーザーの要求に合致しなくなるまで時間をチェックするように要求していない場合は、値0を実行する必要があります。しかし、生成された.batに出力するので、PMLite.bat IF 0 EQU 0 GOTO Loopに次のような結果が得られます。これは、errorlevelの値をスクリプトに出力することが役に立たないためです。スクリプトに%errorlevel%を維持しながら、生成されたスクリプトに出力する方法はありますか?

+2

コードを画像として送信しないでください。コードをコピーして質問に貼り付け、そのコードブロックを作成します。 – Squashman

+0

パーセント記号%% errorlevel %%を二重にするか、キャレットでエスケープする^%errorlevel ^% – Richard

+0

dateコマンドはロケールによって大きく異なることに注意してください。ロケールに依存しないwmicを使用する方が良いです –

答えて

0

リチャードがコメントですでに述べたように、パーセント記号をechoで印刷可能にするには、%%errorlevel%%をエスケープする必要があります。
スクリプトが現時点では、PMLite.batはファイルの末尾にテキストを追加するだけで大​​きくなります。おそらく短い/スクリプトが少し読みやすくするために
何か:

あなたは一度だけリダイレクト演算子を使用してテキストのブロックを追加することができます

>yourfile.bat (
echo line one 
echo line two 
echo line three 
) 

yourfile.batの内容は、すべてに置き換えられてしまいますということで括弧のブロック内に含まれています。

+0

ファイルの内容を置き換える簡単な方法を知らせてくれてありがとう@ geisterfurz007ありがとうございます。私はもっ​​と簡単な方法がなければならないことを知っていました。賢明な人から学ぶことで、コードを学習しやすくなります。良い一日を! – Monkeybomb365

+0

これはすてきなコメントでした:)ありがとう、同じことを祈っています! – geisterfurz007

関連する問題