批处理文件 - 防止输出变量值

时间:2017-01-30 01:55:47

标签: batch-file

目前我正在处理一个批处理文件,该文件在某一天的某个时间会自动关闭用户的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。请特别注意具有以下代码echo IF %errorlevel% EQU 0 GOTO Loop >>PMLite.bat的第#340行,如果时间不符合用户要求返回检查时间直到满足的时间,则应执行值0。但是因为我输出到生成的.bat,我在PMLite.bat IF 0 EQU 0 GOTO Loop中得到以下结果,因为它将errorlevel的值输出到脚本中,使其无效。有没有办法输出到生成的脚本,同时仍然在脚本中保留%errorlevel%?

1 个答案:

答案 0 :(得分:0)

正如理查德在评论中提到的那样,您必须避开百分号,才能使echo使用它们两次打印:%%errorlevel%%。 由于您的脚本现在正在使用,因此您只会在文件末尾添加文字,因此PMLite.bat会越来越大。 可能会使您的脚本更具可读性/更短:

您只能使用重定向运算符追加文本块一次:

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

这样,yourfile.bat的内容将替换为括号内的所有内容。