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