Переименуйте новое расширение файла - PullRequest
1 голос
/ 08 августа 2011

Я пытаюсь написать командный скрипт (.cmd файл), который найдет самый новый файл и переименует его расширение.

Так что, если есть:

file1.txt
file2.txt
file3.txt

И file3.txt является самым новым, сценарий должен изменить расширение на .xml, поэтому конечный результат будет file3.xml.

Если я сделаю следующее, он переименует расширение файла:

move file3.txt file3.xml

Но я не знаю, как найти самый новый файл, а затем изменить его расширение.

1 Ответ

0 голосов
/ 01 ноября 2015

Вы можете использовать следующий код:

@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 /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...