Windows cmd中for循环的属性列表

Windows cmd中for循环的属性列表,windows,batch-file,for-loop,cmd,Windows,Batch File,For Loop,Cmd,我正在寻找一个属性列表,以及它们在命令提示符内的for循环中的作用 具体来说,我有一个.bat文件,它从C:\驱动器的根目录复制一个文件,并将其粘贴到预先指定目录(即C:\Users\John\Test目录)中的所有文件夹中 这是命令: @echo off for /D %%a in (C:\Users\John\Test Directory\*.*) do xcopy /y /d C:\test_file.txt "%%a\" .bat确实执行了我需要它执行的操作,但我不理解“%%a”在命令

我正在寻找一个属性列表,以及它们在命令提示符内的for循环中的作用

具体来说,我有一个.bat文件,它从C:\驱动器的根目录复制一个文件,并将其粘贴到预先指定目录(即C:\Users\John\Test目录)中的所有文件夹中

这是命令:

@echo off
for /D %%a in (C:\Users\John\Test Directory\*.*) do xcopy /y /d C:\test_file.txt "%%a\"

.bat确实执行了我需要它执行的操作,但我不理解“%%a”在命令中的作用。我看到类似的命令使用%%g、%%f等,但没有定义选择这些命令的原因或它们的具体用途。这些属性是任意的还是有定义的函数?我似乎找不到有关属性的任何信息,因此任何见解都值得赞赏

任意。您可以使用任何字母,大写或小写,甚至是符号

for %%# in... do command %%#
这样也行。但是当每次迭代使用多个标记时,最好使用字母表。下面是一个为什么:

for /f "usebackq tokens=1* delims==" %%I in ("textfile.txt") do (
    set "config[%%~I]=%%~J"
)
这是因为
%%I
包含第一个等号之前匹配的文本,而
%%J
包含第一个等号之后的所有内容。在上下文中显示了该示例

您的问题的答案在
for
命令的文档中有提示<有关完整详细信息,请参见cmd控制台中的代码>帮助。具体而言:

一些例子可能会有所帮助:

对于/F“eol=;tokens=2,3*delims=,%i in(myfile.txt)do@echo%i%j%k

将解析myfile.txt中的每一行,忽略以开头的行 分号,将第2个和第3个标记从每行传递到for 正文,标记由逗号和/或空格分隔。注意 正文语句引用%i以获取第二个令牌,%j以获取 第三个令牌和%k以获取第三个令牌之后的所有剩余令牌

进一步解释:

用于参数

第一个参数必须使用单个字符定义,例如字母G

用于%%G英寸…

在FOR循环的每次迭代中,In(..)子句都会被求值并将
%%G
设置为不同的值

如果此子句产生单个值,则将
%%G
设置为该值,并执行该命令

如果该子句产生多个值,则隐式定义额外的参数来保存每个值。这些参数按字母顺序自动分配
%%H%%I%%J
..(隐式参数定义)

如果参数引用文件,则可用于提取文件名/路径/日期/大小

当然,您可以选择字母表中除
%%G
以外的任何字母

%%G
是一个很好的选择,因为它不与(a、d、f、n、p、s、t、x)中的任何一个冲突,并且提供了最长的非冲突字母作为隐式参数使用。
G>H>I>J>K>L>M

格式字母区分大小写,因此使用大写字母也是避免冲突的好方法
%%a
,而不是
%%a

为了彻底起见,应该指出:

  • 在cmd控制台中为使用
    时,请使用单个百分比
  • 在bat脚本中使用
    for
    时,请使用双百分比
  • 检索迭代变量时使用波浪号从值中去除周围的引号。(例如,
    “你好世界!”
    变成了
    你好世界!
    )。使用此命令可以方便地强制使用所需的格式<代码>“%%~G”
    将始终被引用,无论捕获的值是否被引用。使用
    for
    循环捕获文件名时,应始终执行此操作
  • Tilde表示法还允许扩展路径、检索文件大小和其他转换。有关更多详细信息,请参阅cmd控制台中的
    帮助的最后几页

在命令提示窗口中键入
以获取/?
,然后阅读帮助文本;您将看到,您需要指定一个变量
%variable
,它由一个字母组成(区分大小写),并且如果在批处理程序中使用
for
命令行,您需要将
%
符号加倍……是的,我已经读过了,但它并没有指明那个字母是任意的还是每个字母都有一个特定的功能,这就是我的问题。太好了!那正是我要找的!