因此脚本运行良好,我通常在包含我修改的文件(主要是.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卡吗?
答案 0 :(得分:2)
带有通配符的简单FOR命令在完成读取整个目录之前开始迭代文件。它缓冲一个文件块并迭代它们,然后在它停止的地方拾取。重命名文件时,重命名的文件可能会在列表中稍后排序,并在以后的文件块中选取。因此双重重命名。
每当你有一个修改目录列表的循环时,你应该使用FOR / F和DIR / B命令而不是简单的FOR。
for /f "eol=: delims=" %%F in ('dir /b /a-d-h-s') do ...
EOL=:
以防文件名以;
开头(不太可能,但可能)。具有相同结果的其他有效选项为EOL=*
或EOL=?
- 所有字符都无法开始文件名或路径。