现在,我正在处理一个批处理文件,在某一天的某个时间,它将自动关闭用户的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中得到了以下结果,因为它将错误级别的值输出到脚本中,使它变得无用。是否有一种方法可以将%错误级别%保持在脚本中同时输出到生成的脚本?
发布于 2017-01-30 06:53:52
正如Richard在注释中提到的,您必须转义百分比符号,以便使它们在echo中可打印两次:%%errorlevel%%。
正如您的脚本现在一样,您的PMLite.bat将变得越来越大,因为您只是在文件的末尾追加文本。
可能会使您的脚本更易读/更短:
只能使用重定向运算符一次追加文本块:
>yourfile.bat (
echo line one
echo line two
echo line three
)这样,yourfile.bat的内容将被括号中包含的所有内容替换。
https://stackoverflow.com/questions/41928080
复制相似问题