Batch file 使用唯一ID重命名Windows中的文件夹
我必须重命名目录中的一些图像,但我需要能够为它们提供唯一的编号 因此,文件夹名称如下所示Batch file 使用唯一ID重命名Windows中的文件夹,batch-file,cmd,batch-processing,Batch File,Cmd,Batch Processing,我必须重命名目录中的一些图像,但我需要能够为它们提供唯一的编号 因此,文件夹名称如下所示 Drawer~Folder~TAB~Field3~Field4~Field5~Field6 现在,Field5需要是一个唯一的数字,有没有一种方法可以在命令提示符下执行此操作?这里有一个脚本,您可以修改它以执行所需操作 @echo off setlocal EnableExtensions DisableDelayedExpansion set "x=1" :while1 if %x% LEQ 11 (
Drawer~Folder~TAB~Field3~Field4~Field5~Field6
现在,Field5需要是一个唯一的数字,有没有一种方法可以在命令提示符下执行此操作?这里有一个脚本,您可以修改它以执行所需操作
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "x=1"
:while1
if %x% LEQ 11 (
set "FileName=Drawer~Folder~TAB~Field3~Field4~%x%~Field6"
echo %FileName%
set /a x+=1
goto while1
)
endlocal
编写时,它会生成一个包含10个文件名的列表。为什么不按顺序执行呢?在每次重命名之间,
设置/a字段5+=1
和boom!唯一编号。延迟扩展问题<代码>%x%将始终为1,因为它位于附加代码块中。简单的解决方法是将您的if
语句更改为if%x%gtr 10退出/b
。您还可以使用for/L
循环并摆脱set/a
语句。@rojo我运行了确切的代码,它在Windows 10上对我有效(但在9处停止)。它在第2行有enabledelayedexpansion
是的,脚本确实有enabledelayedexpansion
,但它不是通过引用来使用的!x代码>。另外,在SET
命令中,x和=之间没有空格。它还需要使用!x!+1
@Marichyasana您对%x%
的扩展是正确的。我刚刚意识到,goto
突破了附加条款,并在不延迟扩展的情况下强制重新评估。很抱歉。另一方面,如果不使用enabledelayedexpansion
标志,则应该去掉它。如果%filename%
包含任何感叹号,则如果启用延迟扩展,它们将被删除。设置“filename=etc.”
并引用“varname=value”
对也是一个好主意。这避免了在值中不加引号的情况下,&和%filename%
中的其他特殊字符出现问题。@litset/a
在按变量名称引用变量时不需要注意空格或延迟展开。您可以在循环中设置/a varname=varname+1
,该值将递增。检索该变量需要延迟展开,但增加则不需要。在任何情况下,我发现赋值运算符是一个更整洁的选项<代码>设置/a varname+=1