Вы можете использовать следующий код:
@echo off
for /F "eol=| delims=" %%F in ('dir /B /O-D /TW "C:\Temp\Test\*.txt" 2^>nul') do (
ren "C:\Temp\Test\%%F" "%%~nF.xml"
goto :EOF
)
Команда DIR возвращает список имен файлов, соответствующих шаблону *.txt
без пути и без каких-либо других данных, поскольку /B
(чистый формат) отсортировано в обратном порядке в соответствии с датой последнего изменения (самое новое сначала) из-за /O-D /TW
.
Этот список обрабатывается построчно командой FOR , которая выполняет для первого имени файла команду переименования, чтобы изменить расширение файла для самого нового файла *.txt
в указанном каталоге. После переименования первого файла цикл и обработка пакетного файла прекращаются из-за goto :EOF
. EOF
- это предопределенная метка, означающая конец файла.
Если текущим каталогом при запуске пакетного файла всегда является каталог с текстовыми файлами, пакетный файл может быть закодирован также как:
@echo off
for /F "eol=| delims=" %%F in ('dir /B /O-D /TW *.txt 2^>nul') do (
ren "%%F" "%%~nF.xml"
goto :EOF
)
delims=
отключает разбиение имени файла, возвращаемого командой DIR , на токены по пробелам, если в самом новом файле содержится 1 или более пробелов в имени файла.
2^>nul
перенаправляет любое сообщение об ошибке из-за отсутствия файла *.txt
в текущем, соответственно указанном каталоге на устройство nul
, чтобы подавить это сообщение об ошибке, в результате чего оператор перенаправления >
экранируется здесь с помощью ^
из-за использования его в команде FOR .
%%~nF
означает только имя файла без расширения файла и точку, отделяющую расширение файла от имени файла.
Для лучшего понимания используемых команд и того, как они здесь работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
dir /?
echo /?
for /?
goto /?
ren /?