批处理 在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 处于打开状态。”求高手解决
展开
 我来答
匿名用户
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%不就好了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yyykkkyyyy
2011-06-16 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3267万
展开全部
set t=%time:~0,2%
需要延迟扩展,就是说这是复合语句中的变量,它之后仍使用之前值,(也就是没赋值)可以在使用if 之前加命令setlocal enabledelayedexpansion
,然后在调用时用一对!! 代一对%%取变量值,见set/?
还可以用另一方法延迟变量扩展:

SET T=%time:~0,2%
call SET H=%%T: =0%%
call echo %%H%%
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
453625978
2011-06-16 · TA获得超过3591个赞
知道大有可为答主
回答量:2445
采纳率:0%
帮助的人:2985万
展开全部
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 的状态。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式