2014-02-17 155 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