为了账号安全,请及时绑定邮箱和手机立即绑定

cmd文件中的%和%%有什么区别?

cmd文件中的%和%%有什么区别?

jeck猫 2019-09-24 09:44:56
我最近在.cmd文件中包含了与此类似的行:for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"最初,我仅使用%f,并且在命令行上运行时可以正常工作,而在文件中运行时则无法正常工作。当我切换到%% f时,它在文件中起作用。只是想知道有什么区别。
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞


要知道的三件事:


百分号在批处理文件用来表示命令行参数:%1,%2,...

介于两个百分号之间的任何字符将被解释为变量:


echo %myvar%


两个百分号之间(在批处理文件中)之间没有任何区别,将其视为命令(不是批处理文件)中的单个百分号:%%f

为什么?


例如,如果我们执行您的(简体)命令行


FOR /f %f in ('dir /b .') DO somecommand %f

在批处理文件中,规则2会尝试解释


%f in ('dir /b .') DO somecommand %

作为变量。为了防止这种情况,您必须应用规则3,然后再转义%第二条规则%:


FOR /f %%f in ('dir /b .') DO somecommand %%f


查看完整回答
反对 回复 2019-09-24
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

在DOS中,您不能在命令行上使用环境变量,而只能在批处理文件中使用环境变量,在批处理文件中,它们使用%符号作为分隔符。如果要%在批处理文件中(例如在echo语句中)使用文字符号,则需要将其加倍。

这会延续到Windows NT,Windows NT允许在命令行上使用环境变量,但是为了向后兼容,您仍然需要将%.cmd文件中的符号加倍。


查看完整回答
反对 回复 2019-09-24
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

请确保变量是单个字符。 

查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 3630 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信