cmd 给我一个错误,这是我在批量重命名循环中没有预料到的

cmd 给我一个错误,这是我在批量重命名循环中没有预料到的

我对 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" > filesdel files创建(和删除)一个临时列表,例如*.jpg目录中的所有文件。目录使用该/b选项仅包含文件名,而不包含每个文件的完整路径。创建这个临时文件可以帮我解决一个小问题,即在循环dir /b中直接使用时会复制已重命名的文件for

  • for /f "tokens=*" %%i in (files) do copy /-y "%%i" !random!.jpg做两件事:

    1. 从文本文件中读取行(文件名)(for /f "tokens=*" %%i in (files)为了环形。

    2. 将文件复制到同一目录(通过复制) 并命名为随机名称 ( copy /-y "%%i" !random!.jpg)。在这种情况下,/-y其目的与-i原始示例相同(即手动确认覆盖同名文件,请参阅 Linux动量)。

  • 请注意,你可以替换(重命名)或移动根据copy需要选择 (尽管在这种情况下move只有/-y选项)。但请参阅注意事项以下。

注意事项

请注意,%random%仅生成从 0 到 32,767(含)的整数,并且可能会产生重复。ss64 页面上有关为 cmd 生成随机数的内容更加详细地阐述。

这意味着有可能为两个(或更多)不同的文件生成相同的“随机”名称。因此renmove在这里可能很危险。copy /-y通过不覆盖任何原始文件,部分缓解了重复名称可能产生的一些问题自动地(尽管它仍然可以替代它们)。但是,找到另一个文件名来源可能会更好(最好是唯一的名称,正如评论中再次指出的那样)。上面链接的随机数生成页面也有一个%random%可以在 中运行的JavaScript 替代方案cmd,这可能是比%random%它更好的选择。

相关内容