簡體   English   中英

批處理腳本在重命名文件時循環遍歷文件

[英]Batch script to loop over files while renaming them

我可以使用它來循環文件:

for %%a in ("%directory%\*.%extension%") do (
    echo FILE: %%~fa
)
goto :eof

如果我還重命名文件,如下所示( :rename是重命名文件的子例程):

for %%a in ("%directory%\*.%extension%") do (
    echo FILE: %%~fa
    call :rename "%%~fa"
)
goto :eof

在這種情況下,一些文件被重命名(和回顯)兩次甚至三次。 我認為這是因為在重命名后,在某些情況下,它們被視為需要循環的新文件。 但是,所有重命名的文件都不會發生這種情況。

我怎么能克服這個? 我希望每個文件只重命名一次。

解:

:: remove quotes:
:: http://www.dostips.com/?t=Snippets.TrimQuotes

for /f "useback tokens=*" %%a in ('%extension%') do set extension=%%~a

for /f "useback tokens=*" %%a in ('%directory%') do set directory=%%~a

for /f "delims=" %%a in ('dir /b /a-d "%directory%\*.%extension%" ^| sort /r') do (
    echo FILE: %directory%\%%a
    call :renamingSubroutine "%directory%\%%a"
)
goto :eof

要么:

:: remove quotes:
:: http://www.dostips.com/?t=Snippets.TrimQuotes

for /f "useback tokens=*" %%a in ('%extension%') do set extension=%%~a

for /f "useback tokens=*" %%a in ('%directory%') do set directory=%%~a

for /f "delims=" %%a in ('dir /b /a-d /s /on "%directory%\*.%extension%"') do (
    echo FILE: %%~fa
    call :renamingSubroutine "%%~fa"
)
goto :eof

嘗試這個:

for /f "delims=" %%a in ('dir /b /a-d /s "%directory%\*.%extension%"^|sort /r') do (
    echo FILE: %%~fa
    call :rename "%%~fa"
)
goto :eof

順便說一句,您不應該為批處理函數指定cmd命令( rename )的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM