Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用唯一ID重命名Windows中的文件夹_Batch File_Cmd_Batch Processing - Fatal编程技术网

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%
中的其他特殊字符出现问题。@lit
set/a
在按变量名称引用变量时不需要注意空格或延迟展开。您可以
在循环中设置/a varname=varname+1
,该值将递增。检索该变量需要延迟展开,但增加则不需要。在任何情况下,我发现赋值运算符是一个更整洁的选项<代码>设置/a varname+=1