Вот расширенный пакетный файл, который удаляет все имена файлов из names.txt
, используемые при переименовании файлов.
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "NamesListFile=names.txt"
rem Does the file with the list of new file names not exist?
if not exist "%NamesListFile%" goto EndBatch
rem Delete in local environment all environment variables
rem of which name starts with the string "newname[".
for /F "delims==" %%I in ('set newname[ 2^>nul') do set "%%I="
rem Load the list of new file names and assign them to environment variables.
set "NameIndex=0"
for /F "usebackq eol=| delims=" %%I in ("%NamesListFile%") do (
set /A NameIndex+=1
set "newname[!NameIndex!]=%%I"
)
rem Do the file renames as long as there is a new file name available in list.
set "NamesCount=%NameIndex%"
set "NameIndex=0"
set "RenameCount=0"
for /F "eol=| delims=" %%I in ('dir /B /O:N *.doc 2^>nul') do (
set /A NameIndex+=1
for %%J in (!NameIndex!) do (
if defined newname[%%J] (
ren "%%I" "!newname[%%J]!"
set /A RenameCount+=1
) else goto RebuildList
)
)
:RebuildList
rem Was no file found to rename?
if %RenameCount% == 0 goto EndBatch
rem Were all new names used to rename files?
if %RenameCount% == %NamesCount% (
del "%NamesListFile%"
goto EndBatch
)
rem Create a new file names list with used file names removed.
set /A RenameCount+=1
(for /L %%I in (%RenameCount%,1,%NamesCount%) do echo !newname[%%I]!)>"%NamesListFile%"
:EndBatch
endlocal
Ограничения этого пакетного файла:
- Это неработать с именами файлов, содержащими одно или несколько
!
. - . Он не проверяет, было ли успешным каждое переименование файлов.
Для понимания используемых команд и того, как они работают,откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
del /?
dir /?
echo /?
endlocal /?
for /?
goto /?
if /?
rem /?
ren /?
set /?
setlocal /?