2014-02-17 175 views
2

因此,该脚本运行良好,我通常在文件夹中使用我修改的文件(主要是.mp3's)在文件夹中修剪第一个X字符(数字空格破折号等)文件。.bat重命名文件运行多次

@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卡运行它(格式化银河S4 W的/ Android 4.3的),我在它已经插入完全适用于文件的70%。但对于一些它运行两次,而对于一些非常罕见的行为,它表现得好像根本没有运行。我完全被它弄糊涂了,它只是SD卡吗?

+0

对不起,关于android标签,建议回头看看它是不相关的。我的坏 – user3268199

回答

2

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

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

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

EOL=:是以防万一一个文件名与;(可能性很小,但有可能)开始。具有相同结果的其他有效选项为EOL=*EOL=? - 全部为无法开始文件名或路径的字符。

+0

谢谢,你的答复表示赞赏。它在其他领域也会有很大的帮助! – user3268199