运行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中就不能用啊
展开
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再次执行,替换为需要的值
在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再次执行,替换为需要的值
展开全部
在批处理文件中,所有变量如 %a 都要双写 %% ,也就是写成 %%a 等等。
for /f %%a in ('dir /a:d /b') do attrib +h %%a
for /f %%a in ('dir /a:d /b') do attrib +h %%a
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在bat中写:cmd /c 你的命令
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询