批处理文件参数中的百分号(%和%%)是什么意思?


11

我想我缺少了一些东西,因为我似乎找不到这意味着什么。

例:

for /D %%A in (*) do "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

该行应该使用的命令行版本7zip来压缩单个文件夹,但是%%A在这种情况下我很困惑。



1
命令行和Bath文件混淆了。更改了顶部的标志。
Jim Kieger

Answers:


12

for命令需要一个占位符,因此您可以传递变量以供稍后在查询中使用,我们告诉它使用占位符%A,您看到的代码使用的原因%%A是因为在批处理文件中(我假设您在其中找到了此文件)%具有特殊的含义,因此您必须执行两次,%%以便将其转成一个%传递给for命令

为了真正分解命令的作用,命令分为两个部分:

 for /D %%A in (*) do .....

这部分内容是针对当前文件夹中的每个文件夹执行以下命令,并替换%%A为当前正在处理的文件夹的名称。

..... "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

这部分说的是执行命令,"\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"并用%%A我们正在处理的当前记录替换两个。


仅仅为了nitpick-for循环上的/ D会将*通配符限制为目录,而不是“此文件夹中的每个文件以及每个子文件夹”(假定启用了命令扩展名)。
ernie

@ernie您是正确的,我在查看帮助页面上的/ R开关,我已经更正了我的答案。
Scott Chamberlain

谢谢你,它显示出这种感觉看起来多么令人讨厌,但这是非常古老的东西,我必须从几本在线手册中进行挖掘。
Jim Kieger

0

这是一个变量。

该特定示例使用FOR循环directory选项,遍历目录并将它们分配给%% A。

这也不是命令行示例,而是批处理文件示例。在批处理文件中,您需要使用%% A,而在命令行中,您只需使用%A。


0

在您的方案中,%% A是占位符,表示“ for”循环所迭代的内容(/ D表示目录)。因此,循环的每次迭代中,%% A是目录之一。

您会在批次代码中看到%%而不是%。您将在命令提示符中看到%而不是%%。

因此要知道,如果将批处理文件代码复制到命令提示符中并在使用%%的情况下运行它,则会出错,反之亦然。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.