批处理 在if语句块中使用set的替换功能失败的解决办法
set语句的替换功能如下,可以将时间中的空格换成0:SETT=%time:~0,2%SETH=%T:=0%echo%H%但是在if语句中,SETH=%T:=0%会发生错误...
set语句的替换功能如下,可以将时间中的空格换成0 :
SET T=%time:~0,2%
SET H=%T: =0%
echo %H%
但是在if语句中,SET H=%T: =0% 会发生错误,
if 1==1 (
SET T=%time:~0,2%
SET H=%T: =0%
echo %H%
)
结果会显示“ECHO 处于打开状态。”求高手解决 展开
SET T=%time:~0,2%
SET H=%T: =0%
echo %H%
但是在if语句中,SET H=%T: =0% 会发生错误,
if 1==1 (
SET T=%time:~0,2%
SET H=%T: =0%
echo %H%
)
结果会显示“ECHO 处于打开状态。”求高手解决 展开
2011-06-16
展开全部
这一行SET T=%time:~0,2% ,后面有个空格是你特意加上的吗??
因为cmd会把一整行命令预读。所以才出的错。
是变量延迟的原因:开启后就好了。变量标识符变为!
setlocal enabledelayedexpansion
if 1==1 (
SET T=%time:~0,2%
SET H=!T: =0!
echo !H!)
详细的跟你说一下吧:
其实你的代码执行到SET H=%T: =0%就已经出错了。尽量的在if中的相关的命令要少
只需要SET H=%T: =0%不就好了。
因为cmd会把一整行命令预读。所以才出的错。
是变量延迟的原因:开启后就好了。变量标识符变为!
setlocal enabledelayedexpansion
if 1==1 (
SET T=%time:~0,2%
SET H=!T: =0!
echo !H!)
详细的跟你说一下吧:
其实你的代码执行到SET H=%T: =0%就已经出错了。尽量的在if中的相关的命令要少
只需要SET H=%T: =0%不就好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
set t=%time:~0,2%
需要延迟扩展,就是说这是复合语句中的变量,它之后仍使用之前值,(也就是没赋值)可以在使用if 之前加命令setlocal enabledelayedexpansion
,然后在调用时用一对!! 代一对%%取变量值,见set/?
还可以用另一方法延迟变量扩展:
SET T=%time:~0,2%
call SET H=%%T: =0%%
call echo %%H%%
需要延迟扩展,就是说这是复合语句中的变量,它之后仍使用之前值,(也就是没赋值)可以在使用if 之前加命令setlocal enabledelayedexpansion
,然后在调用时用一对!! 代一对%%取变量值,见set/?
还可以用另一方法延迟变量扩展:
SET T=%time:~0,2%
call SET H=%%T: =0%%
call echo %%H%%
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
setlocal enabledelayedexpansion
if 1==1 (
SET T=%time:~0,2%
SET H=%T: =0%
echo %H%
)
::括号内的多条语句可以看成是一条复合语句(言外之意就是:批处理在进行预处理时把括号内的语句当成是一条语句在运行),如果不开启变量延迟,那么t的值改变SET T=%time:~0,2%
,其实对于SET H=%T: =0%来说,t还是空值,那么h也是空值,所以echo 空值就会显示 echo 的状态。
if 1==1 (
SET T=%time:~0,2%
SET H=%T: =0%
echo %H%
)
::括号内的多条语句可以看成是一条复合语句(言外之意就是:批处理在进行预处理时把括号内的语句当成是一条语句在运行),如果不开启变量延迟,那么t的值改变SET T=%time:~0,2%
,其实对于SET H=%T: =0%来说,t还是空值,那么h也是空值,所以echo 空值就会显示 echo 的状态。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询