2017-01-30 31 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 

我的主要目標是讓程序生成一個名爲「PMLite.bat」,監控PC的當前日期/時間和批處理文件文件時由用戶創建的變量的值比滿足他們關閉PC。請特別注意#340行,該行的代碼爲echo IF %errorlevel% EQU 0 GOTO Loop >>PMLite.bat,如果時間不符合用戶請求返回檢查時間直到滿足的時間,則該行應執行值0。但是因爲即時輸出到生成的.bat,我在PMLite.bat IF 0 EQU 0 GOTO Loop中得到以下結果,因爲它將errorlevel的值輸出到腳本中,使其無效。有沒有辦法輸出到生成的腳本,同時仍然保持腳本中的%errorlevel%?

+2

請不要將您的代碼作爲圖像發佈。將代碼複製並粘貼到您的問題中並創建代碼塊。 – Squashman

+0

要麼是雙重百分比符號%% errorlevel %%,要麼用逗號轉義它們^%errorlevel ^% – Richard

+0

請注意,date命令高度依賴於語言環境。最好使用獨立於語言環境的wmic –

回答

0

正如Richard在評論中已經提到的,你必須避開百分號以使它們可以用echo打印兩次:%%errorlevel%%
由於您的腳本是現在,您的PMLite.bat將越來越大,因爲您只是在文件末尾添加文本。
某事很可能使你的腳本一點更可讀/短:

您可以將使用重定向操作只有一次的文本塊:

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

進行最終yourfile.bat內容將得到一切替換包含在括號內。

+0

謝謝@ geisterfurz007通知我一個更簡單的方法來替換文件的內容。我知道必須有一個更簡單的方法。從智慧中學習讓學習更容易。祝你今天愉快! – Monkeybomb365

+0

那麼這是一個很好的評論:)非常感謝,祝你一樣! – geisterfurz007