Windows 重命名多个索引id为的文件

Windows 重命名多个索引id为的文件,windows,batch-file,Windows,Batch File,我正在尝试创建一个.bat文件,该文件使用索引id将文件夹中的所有项目重命名为自定义名称,如下所示: abc.mp4 def.mp4 ghi.mp4 jkl.mp4 mno.mp4 pqr.mp4 到{random numbers}+{predefined word}+{index id},如下所示: 14878845file1 48785556file2 22665887file3 47990456file4 ... 这是我的密码: @ECHO OFF SET "i=1" SET "tem

我正在尝试创建一个
.bat
文件,该文件使用
索引id
将文件夹中的所有项目重命名为自定义名称,如下所示:

abc.mp4
def.mp4
ghi.mp4
jkl.mp4
mno.mp4
pqr.mp4
{random numbers}
+
{predefined word}
+
{index id}
,如下所示:

14878845file1
48785556file2
22665887file3
47990456file4
...
这是我的密码:

@ECHO OFF
SET "i=1"
SET "temp=file"
FOR %%A IN (*.mp4) DO CALL :SUB "%%A"
    :SUB
    IF %i% GTR 0 REN %1 "%i%%RANDOM%%RANDOM%temp%temp%ep%i%".mp4
    SET/A i+=1
上面的代码工作正常,但在某些情况下仍然无法正常工作,有时它会跳转第一个文件,或者使用不同的
索引id
重命名同一文件两次,或者
索引id
将是另一个


此代码有什么问题?

您的代码有一些问题


1) 如果您重命名一个文件,然后再按字母顺序向下重命名,则FOR命令将再次拾取该文件。您需要更改为FOR/F命令,并在IN子句中使用DIR命令

2) 在执行
FOR
命令之后,还需要执行
转到:EOF
,否则
:SUB
代码将执行两次

我已将您的所有代码移动到
FOR
命令中,并相应地使用了延迟扩展。我没有看到检查变量是否大于零的任何点,而您已经将其设置为1

@echo off
setlocal EnableDelayedExpansion
SET "i=1"
SET "temp=file"
FOR /F "delims=" %%A IN ('dir /a-d /b *.mp4') DO (
    REN "%%A" "!i!!RANDOM!!RANDOM!temp%temp%ep!i!.mp4"
    SET /A i+=1
)

您的代码有一些问题


1) 如果您重命名一个文件,然后再按字母顺序向下重命名,则FOR命令将再次拾取该文件。您需要更改为FOR/F命令,并在IN子句中使用DIR命令

2) 在执行
FOR
命令之后,还需要执行
转到:EOF
,否则
:SUB
代码将执行两次

我已将您的所有代码移动到
FOR
命令中,并相应地使用了延迟扩展。我没有看到检查变量是否大于零的任何点,而您已经将其设置为1

@echo off
setlocal EnableDelayedExpansion
SET "i=1"
SET "temp=file"
FOR /F "delims=" %%A IN ('dir /a-d /b *.mp4') DO (
    REN "%%A" "!i!!RANDOM!!RANDOM!temp%temp%ep!i!.mp4"
    SET /A i+=1
)

如果您重命名一个文件,然后再按字母顺序向下重命名,则该文件将被
FOR
命令再次拾取。您需要更改为
FOR/F
命令,并在
IN
子句中使用
DIR
命令
FOR/F“delims=“%%A IN('dir/A-d/b*.mp4')DO…
如果重命名一个文件,然后再按字母顺序向下重命名,则该文件将被
FOR
命令再次拾取。您需要更改为
FOR/F
命令,并在
IN
子句中使用
DIR
命令
对于/F“delims=“%%A IN('dir/A-d/b*.mp4'),执行…
除此之外,@PetrKann,请格外小心覆盖系统变量(
%temp%
)。我建议您选择其他内容。除上述内容外,@PetrKann,请格外小心覆盖系统变量(
%temp%
)。我建议你选择别的。