运行CMD,本来可用的命令,放在bat中就不行了,为什么

for/f%ain('dir/a:d/b')doattrib+h%a,这个为什么放在bat中就不能用啊... for /f %a in ('dir /a:d /b') do attrib +h %a,这个为什么放在bat中就不能用啊 展开
 我来答
sl543001
2010-05-10 · 超过18用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:41.3万
展开全部
因为预处理的原因
在BAT中,默认变量的优先级最高,变量早于for本身被处理
为了使for里的变量不早于for本身被处理,需奥使用%%号替代%号
例如
set a=0
for /l %a in (1,1,3) do set /a a=%a%+%a
echo %a%
看起来等效于
set a=0
set /a a=%a%+1
set /a a=%a%+2
set /a a=%a%+3
echo %a%
最后a=6
实际上不是的
应该等效于
set a=0
set /a a=0+1
set /a a=0+2
set /a a=0+3
echo %a%
最后a=3
因为在程序执行for之前%a%就强制被替换为0了

而您的命令中BAT中%%会被强制被替换为%
所以%a会被强制被替换为空
而%%a会被强制被替换为%a,然后才会被for再次执行,替换为需要的值
marine_marion
2010-05-10 · TA获得超过6823个赞
知道大有可为答主
回答量:1505
采纳率:0%
帮助的人:2740万
展开全部
在批处理文件中,所有变量如 %a 都要双写 %% ,也就是写成 %%a 等等。

for /f %%a in ('dir /a:d /b') do attrib +h %%a
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迅捷沮种捅诺5i
2010-05-10 · 超过29用户采纳过TA的回答
知道答主
回答量:147
采纳率:50%
帮助的人:44.8万
展开全部
在bat中写:cmd /c 你的命令
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式