.bat重命名文件多次运行

时间:2014-02-17 03:49:19

标签: batch-file

因此脚本运行良好,我通常在包含我修改的文件(主要是.mp3)的文件夹中运行它来修剪多个文件的文件名(数字空间破折号)中的前X个字符。

@echo off
setLocal enableDelayedExpansion
set X=5
set FOLDER_PATH=.
pushd %FOLDER_PATH%
for %%f in (*) do if %%f neq %~nx0 (
    set "filename=%%~nf"
    set "filename=!filename:~%X%!"
    ren "%%f" "!filename!%%~xf"
)
popd

但在我插入的SD卡(格式化为Galaxy S4 w。/ Android 4.3)上运行它可以很好地处理70%的文件。但是对于一些人而言,它运行了两次,并且对于极少数情况,它的行为就像它根本没有运行一样。我完全被它弄糊涂了,它只是SD卡吗?

1 个答案:

答案 0 :(得分:2)

带有通配符的简单FOR命令在完成读取整个目录之前开始迭代文件。它缓冲一个文件块并迭代它们,然后在它停止的地方拾取。重命名文件时,重命名的文件可能会在列表中稍后排序,并在以后的文件块中选取。因此双重重命名。

每当你有一个修改目录列表的循环时,你应该使用FOR / F和DIR / B命令而不是简单的FOR。

for /f "eol=: delims=" %%F in ('dir /b /a-d-h-s') do ...

EOL=:以防文件名以;开头(不太可能,但可能)。具有相同结果的其他有效选项为EOL=*EOL=? - 所有字符都无法开始文件名或路径。