上午 9 点之前 运行 时的 Bat 文件给出错误,无效数字。数字常量是十进制 (17),
Bat file when ran prior to 9 AM gives the error,Invalid number. Numeric constants are either decimal (17),
我有一个 bat 文件,用于检查 23:00 时间和 23:00 之后要执行的一些进一步步骤的启动。
稍后启动到 10:00 AM
的批次确实有效。
但是当 运行 在 09:00 AM
时相同的 bat 不起作用并抛出如下错误:
Invalid number. Numeric constants are either decimal (17),
hexadecimal (0x11), or octal (021).
我观察到这个 bat 文件只工作了两位数的小时,而不是个位数的小时,例如 1,2,3,4,5,6,7,8,9
。
代码:
@For /F "tokens=1,2,3,4 delims=/-: " %%A in ('time /t') do @(
Set Hour=%%A
Set Minute=%%B
)
echo current hour is %Hour%
echo current Minute is %Minute%
set /A remaining_hour=23-%Hour%
set /A remaining_minutes=60-%Minute%
echo Remaining hours to reach 23:00 is %remaining_hour%
echo Remaining Minutes to reach 23:00 is %remaining_minutes%
你能帮我去掉错误信息吗?
根据建议修改了下面的代码,当我尝试将我的系统时间更改为 09:00 AM
来测试 bat 文件时仍然不起作用
修改后的代码1:
@echo off
@For /F "tokens=1,2,3,4 delims=/-: " %%A in ('time /t') do @(
Set Hour=%%A
for /F "tokens=* delims=0" %%N in ("%Hour%") do set "Hour=%%N" & set /A "Hour+=0"
Set Minute=%%B
)
setlocal EnableDelayedExpansion
echo current hour is %Hour%
echo current Minute is %Minute%
set /A remaining_hour=23-%Hour%
set /A remaining_minutes=60-%Minute%
echo Remaining hours to reach 23:00 is %remaining_hour%
echo Remaining Minutes to reach 23:00 is %remaining_minutes%
set /A sleep_Minutes=((remaining_minutes+(60*remaining_hour))*60)
echo Total sleep time is %sleep_Minutes%
pause
set /A
命令将前面带有零的数字解释为八进制数字 -- 参见 set /?
:
Numeric values are decimal numbers, unless prefixed by 0x for hexadecimal numbers, and 0 for octal numbers. So 0x12 is the same as 18 is the same as 022. Please note that the octal notation can be confusing: 08 and 09 are not valid numbers because 8 and 9 are not valid octal digits.
您可以通过删除 Hour
值中的前导零轻松解决此问题:
for /F "tokens=* delims=0" %%N in ("%Hour%") do set "Hour=%%N" & set /A "Hour+=0"
for /F "tokens=* delims=0" %%N in ("%Minute%") do set "Minute=%%N" & set /A "Minute+=0"
这是实现上述内容的完整代码:
@for /F "tokens=1,2,3,4 delims=/-: " %%A in ("%TIME%") do @(
for /F "tokens=* delims=0" %%N in ("%%A") do set "Hour=%%N" & set /A "Hour+=0"
for /F "tokens=* delims=0" %%N in ("%%B") do set "Minute=%%N" & set /A "Minute+=0"
)
echo current hour is %Hour%
echo current Minute is %Minute%
set /A remaining_hour=23-Hour
set /A remaining_minutes=60-Minute
echo Remaining hours to reach 23:00 is %remaining_hour%
echo Remaining Minutes to reach 23:00 is %remaining_minutes%
我有一个 bat 文件,用于检查 23:00 时间和 23:00 之后要执行的一些进一步步骤的启动。
稍后启动到 10:00 AM
的批次确实有效。
但是当 运行 在 09:00 AM
时相同的 bat 不起作用并抛出如下错误:
Invalid number. Numeric constants are either decimal (17),
hexadecimal (0x11), or octal (021).
我观察到这个 bat 文件只工作了两位数的小时,而不是个位数的小时,例如 1,2,3,4,5,6,7,8,9
。
代码:
@For /F "tokens=1,2,3,4 delims=/-: " %%A in ('time /t') do @(
Set Hour=%%A
Set Minute=%%B
)
echo current hour is %Hour%
echo current Minute is %Minute%
set /A remaining_hour=23-%Hour%
set /A remaining_minutes=60-%Minute%
echo Remaining hours to reach 23:00 is %remaining_hour%
echo Remaining Minutes to reach 23:00 is %remaining_minutes%
你能帮我去掉错误信息吗?
根据建议修改了下面的代码,当我尝试将我的系统时间更改为 09:00 AM
来测试 bat 文件时仍然不起作用修改后的代码1:
@echo off
@For /F "tokens=1,2,3,4 delims=/-: " %%A in ('time /t') do @(
Set Hour=%%A
for /F "tokens=* delims=0" %%N in ("%Hour%") do set "Hour=%%N" & set /A "Hour+=0"
Set Minute=%%B
)
setlocal EnableDelayedExpansion
echo current hour is %Hour%
echo current Minute is %Minute%
set /A remaining_hour=23-%Hour%
set /A remaining_minutes=60-%Minute%
echo Remaining hours to reach 23:00 is %remaining_hour%
echo Remaining Minutes to reach 23:00 is %remaining_minutes%
set /A sleep_Minutes=((remaining_minutes+(60*remaining_hour))*60)
echo Total sleep time is %sleep_Minutes%
pause
set /A
命令将前面带有零的数字解释为八进制数字 -- 参见 set /?
:
Numeric values are decimal numbers, unless prefixed by 0x for hexadecimal numbers, and 0 for octal numbers. So 0x12 is the same as 18 is the same as 022. Please note that the octal notation can be confusing: 08 and 09 are not valid numbers because 8 and 9 are not valid octal digits.
您可以通过删除 Hour
值中的前导零轻松解决此问题:
for /F "tokens=* delims=0" %%N in ("%Hour%") do set "Hour=%%N" & set /A "Hour+=0"
for /F "tokens=* delims=0" %%N in ("%Minute%") do set "Minute=%%N" & set /A "Minute+=0"
这是实现上述内容的完整代码:
@for /F "tokens=1,2,3,4 delims=/-: " %%A in ("%TIME%") do @(
for /F "tokens=* delims=0" %%N in ("%%A") do set "Hour=%%N" & set /A "Hour+=0"
for /F "tokens=* delims=0" %%N in ("%%B") do set "Minute=%%N" & set /A "Minute+=0"
)
echo current hour is %Hour%
echo current Minute is %Minute%
set /A remaining_hour=23-Hour
set /A remaining_minutes=60-Minute
echo Remaining hours to reach 23:00 is %remaining_hour%
echo Remaining Minutes to reach 23:00 is %remaining_minutes%