我可以用它来循环文件:
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