windows - 定义这些批处理命令

标签 windows batch-file command

在过去的几年里,我确实发现 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"的数据行。然后,该行被解释为一系列由分隔符序列分隔的标记。默认情况下,delimsSpaceTab。使用 "...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/

相关文章:

c++ - SetThreadAffinityMask() 似乎不止一次生效

c++ - 为什么可以在 C++ 中使用没有#include 线程的 std::thread ?

vim - 如何定位vim编辑器使用的vimrc文件?

java - 区分一字、二字和三字命令

c++ - 在 Windows 上将 Octave 编译为用于开发的共享库需要哪些步骤?

amazon-web-services - 上传到S3的批处理文件

windows-xp - 如何从Windows XP的批处理文件设置处理器关联性?

batch-file - 是否退出批处理文件中的FOR循环?

php - 在自定义 Symfony 命令中使用 Doctrine?

windows - 当磁盘上的文件发生更改时 Emacs 挂起