在过去的几年里,我确实发现 Stackoverflow 非常有帮助,并决定创建一个帐户 - 这是我的第一篇文章。
示例情况 - 我有很多不同主题的图像 -
AAA_BBB_randomDigits_front.jpg
AAA_BBB_randomDigits_left.jpg
AAA_BBB_randomDigits_right.jpg
ZZZ_EEE_randomDigits_front.jpg
ZZZ_EEE_randomDigits_left.jpg
ZZZ_EEE_randomDigits_right.jpg
我希望将它们全部分组在文件夹中 -
AAA_BBB_randomDigits\(contains left, front and right)
ZZZ_EEE_randomDigits\(contains left, front and right)
我目前拥有的代码有效 -
@echo off
for /f "tokens=1-3 delims=_" %%a in ('dir /b /a-d *_*_*_*.*') do (
md "%%a_%%b_%%c" 2>nul
move "%%a_%%b_%%c*" "%%a_%%b_%%c"
)
pause
但是,如果有人可以向我解释,我会很高兴 -
%%a 是什么?
dir/b/a-d
是什么?为什么需要它?- 是否有必要关闭
@echo
并暂停?
谢谢大家,我真的很感激。
最佳答案
有关文档,请参阅命令名称/?根据提示。
dir/b/a-d filemask
执行目录列表 /b
仅指定文件名 - 无大小、日期、页眉或页脚。 /a-d
排除目录名称。
您需要它来为 for/f
命令提供名称。
for/f
读取括号中的“文件名”(它可以是真实的文件名或单引号命令(如 dir
)或双引号文字string)并根据指定选项(紧跟在 /f< 后面的引号中的部分)为元变量(在本例中为
)。%%a
)赋值
delims
选项指定使用哪组字符来解析来自指定"file"的数据行。然后,该行被解释为一系列由分隔符序列分隔的标记。默认情况下,delims
为 Space 和 Tab。使用 "...delims="
完全关闭 delims
是很常见的,在这种情况下,只有一个标记(整行)。请注意,delims=
和 "
之间的任何字符都是同等级别且区分大小写 - 它是一组分隔符
,将替换 空格和制表符,而不是分隔符字符串
。
tokens
选项指定按数字选择哪些标记,从 1 开始。特殊标记 *
表示“最大编号标记之后的行的剩余部分”指定(包括任何分隔符)”。默认情况下,tokens=1
。
%%a
是一个元变量。它是保存从 tokens=
列表中选择的第一个 token 编号的变量。每个选定的 token 编号都会按字母顺序分配给下一个元变量名称,因此在您的示例中,由于您有 tokens=1-3
那么 %%a
是第一个标记,%%b
第二个标记,%%c
第三个标记。 元变量始终是一个字母(有时会使用一些其他字符 - 但绝对不允许使用数字)并且名称区分大小写(通常,批处理不区分大小写)。 %%a
、%%A
和 %a%
都是不同的变量。 %a%
和 %A%
是相同变量。
元变量仅在创建它的for
循环内有效。当for
循环结束时,变量消失。
@echo off
只是关闭批处理本来会产生的命令回显(在控制台上显示命令,然后执行它)。它用于减少显示屏上的困惑。调试一段代码时,通常会将 echo
设置为 on
(echo on
),然后再次关闭 (echo off
) 来准确显示正在执行的指令。 @
表示“不向控制台报告此命令”
暂停只是等待,直到从键盘收到响应。它用于允许读取显示内容,而不是简单地直接继续执行下一条指令。它经常用于调试,并且如果通过使用点击并咯咯地执行批处理,还可以为用户保留批处理的结果。
关于windows - 定义这些批处理命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48353508/