我对 cmd 还很陌生,在重命名一批 .jpg 文件时遇到了问题。我找到了这个脚本,它给出了我这次意想不到的错误。
对于 *.jpg 中的 i;执行 mv -i "$i" ${RANDOM}.jpg
我执行了 cd ¨path¨ 并输入了该脚本,但它给出了该错误。知道我遗漏了什么吗?
提前致谢。
答案1
知道我遗漏了什么吗?
正如评论中提到的,此命令是 Linux shell 命令。它不是设计用于在 Windows 中运行的cmd
。Windows 不知道如何解析它以执行您想要的操作。
Windows 的类似批处理文件可能是:
setlocal EnableDelayedExpansion
dir /b "*.jpg" > files
for /f "tokens=*" %%i in (files) do copy /-y "%%i" !random!.jpg
del files
您可以将其保存为例如random_files_names.bat
。
重要信息
设置本地 启用延迟扩展允许某些变量(在本例中是特殊变量%随机的%)“在执行时而不是解析时展开”。如果未启用此功能,则由 生成的随机变量
%random%
将在脚本开始时生成一次,但不会在每个循环周期中更改为另一个值。!
也用于代替%
由于这个(因此%random%
变成!random!
)。dir /b "*.jpg" > files
并del files
创建(和删除)一个临时列表,例如*.jpg
目录中的所有文件。目录使用该/b
选项仅包含文件名,而不包含每个文件的完整路径。创建这个临时文件可以帮我解决一个小问题,即在循环dir /b
中直接使用时会复制已重命名的文件for
。for /f "tokens=*" %%i in (files) do copy /-y "%%i" !random!.jpg
做两件事:请注意,你可以替换任(重命名)或移动根据
copy
需要选择 (尽管在这种情况下move
只有/-y
选项)。但请参阅注意事项以下。
注意事项
请注意,%random%
仅生成从 0 到 32,767(含)的整数,并且可能会产生重复。ss64 页面上有关为 cmd 生成随机数的内容更加详细地阐述。
这意味着有可能为两个(或更多)不同的文件生成相同的“随机”名称。因此ren
或move
在这里可能很危险。copy /-y
通过不覆盖任何原始文件,部分缓解了重复名称可能产生的一些问题自动地(尽管它仍然可以替代它们)。但是,找到另一个文件名来源可能会更好(最好是唯一的名称,正如评论中再次指出的那样)。上面链接的随机数生成页面也有一个%random%
可以在 中运行的JavaScript 替代方案cmd
,这可能是比%random%
它更好的选择。