小编Pet*_*ton的帖子

Windows批处理文件在FOR循环中无法解释地重命名文件名

Windows批处理文件在FOR循环中无法解释地重命名文件名

我有一个小的Windows 7批处理文件来重命名MP3文件名库.我在这个问题中只包含了最后几行代码.它工作正常,除了代码部分的一个问题,该部分将变量的文本字符串(艺术家名称)附加到目录中的每个文件名.(一旦解决,我的批处理文件将使用"set/p var ="来提示文本填充变量.)

用于此测试的两个示例文件名是:

01-serious song.mp3
02-happy song.mp3
Run Code Online (Sandbox Code Playgroud)

这部分代码导致了一个问题:

@echo off
setlocal enabledelayedexpansion
::Temporay test variable
set str=Artist-
for %%a in (*.mp3) do (
  set oldName=%%a
  set newName=!str!!oldName!
  ren "!oldName!" "!newName!"
)
endlocal
Run Code Online (Sandbox Code Playgroud)

结果是02文件以字符串附加一次(按预期)结束,而01文件名获取附加两次的字符串(错误):

Artist-Artist-01-serious song.mp3
Artist-02-happy song.mp3
Run Code Online (Sandbox Code Playgroud)

我已经梳理了互联网,没有找到关于这种情况的讨论.我不想说我自己花了大约8个小时来处理它.经过多次测试和研究后,我认为重命名声明在某种程度上造成了这种情况.

所以我改变了批处理文件,用其中的rename命令调用子程序,认为它干扰了for语句.那仍然有问题.然后我使用echo命令编辑批处理文件,如下所示进行测试.

第二版测试:

@echo off
setlocal enabledelayedexpansion
set str=Artist-
for %%a in (*.mp3) do (
set oldName=%%a
set newName=!str!!oldName!
  call :Action
echo.
echo back in For loop
)
echo.
echo For loop completed
echo !oldName!
echo !newName!
endlocal
goto:eof

:Action …
Run Code Online (Sandbox Code Playgroud)

windows cmd

2
推荐指数
1
解决办法
2822
查看次数

标签 统计

cmd ×1

windows ×1