Batch file 只需使用.bat更改后缀即可

Batch file 只需使用.bat更改后缀即可,batch-file,cmd,filenames,Batch File,Cmd,Filenames,我只需要使用.bat将文件序列从########avi重命名为###two.avi 因此,我需要在扩展之前删除最后3个符号,并将它们更改为“2”。我找到了前缀更改的解决方案 @echo off for %%i in (*.avi) do (set fname=%%i) & call :rename goto :eof :rename ren %fname% two%fname:~3% goto :eof 但后缀上没有。 提前谢谢 UPD. Thanx人!这就是解决办法。我可以用+1代表

我只需要使用.bat将文件序列从########avi重命名为###two.avi 因此,我需要在扩展之前删除最后3个符号,并将它们更改为“2”。我找到了前缀更改的解决方案

@echo off
for %%i in (*.avi) do (set fname=%%i) & call :rename
goto :eof
:rename
ren %fname% two%fname:~3%
goto :eof
但后缀上没有。 提前谢谢

UPD. Thanx人!这就是解决办法。我可以用+1代表来引导你,但我不能。(不需要15个代表) 此外,为了不写那么多,可以用较短的文本:

@echo off
for %%i in (*.avi) do (set fname=%%i) & call :rename
:renameFile
ren %fname% %fname:~0,3%two.avi

您很接近,只需要~n扩展修饰符就可以获得没有扩展名的基名称。它既适用于变量,也适用于调用参数。我将更改:rename例程的名称,以便它不会与rename命令混淆)

如果激活延迟扩展,则不需要子程序。我在循环中切换延迟扩展,以便使用
创建文件名在fname分配期间未损坏

@echo off
for %%i in (*.avi) do (
  set fname=%%~ni
  setlocal enableDelayedExpansion
  ren "!fname!.avi" "!fname:~0,-3!two.avi"
  endlocal
)

+1:我本来会这样做的,但我不知道“在fname分配期间没有损坏”-每天学习CMD.EXE的新知识;-)如果名称包含空格,
^
&
,则重命名将失败,除非使用引号。如果所有原始文件具有相同的长度名称(即六个字符),则此简单方法也有效:
REN??????.AVI???TWO.AVI
@echo off
for %%i in (*.avi) do (
  set fname=%%~ni
  setlocal enableDelayedExpansion
  ren "!fname!.avi" "!fname:~0,-3!two.avi"
  endlocal
)