CMD/BAT - [решено] Поэтапное переименование файлов

Ответить
Аватара пользователя
user37

CMD/BAT - [решено] Поэтапное переименование файлов

Сообщение user37 »

Помогите, плиз!

Есть папка, в которой появляются файлы вида File_XXX.DAT, где XXX - случайное, заранее не известное число.

Нужно переименовать самый старый файл File_XXX.DAT в Current.DAT

После удаления Current.DAT из папки другой программой, переименовать следующий самый старый файл и т.д.

Заранее благодарен!
Аватара пользователя
user37

Re: CMD/BAT - [решено] Поэтапное переименование файлов

Сообщение user37 »

Наверное, слишком много прошу. В принципе, у меня проблема лишь с получением имени самого старого файла в переменную. Дальше - справлюсь.
Аватара пользователя
user37

Re: CMD/BAT - [решено] Поэтапное переименование файлов

Сообщение user37 »

Код:

Код: Выделить всё

@Echo Off
Set Where=D:\Delete2
Set NewName=Current.dat
Set Maska=File_???.dat
FOR /F "usebackq delims=" %%f IN (`Dir "%Where%\%Maska%" /B /A:-D /O:D`) DO Ren "%Where%\%%f" "%NewName%" & GoTo :Continue
:Continue
Echo Делаем дальше что нужно, или не делаем ничего
Аватара пользователя
user37

Re: CMD/BAT - [решено] Поэтапное переименование файлов

Сообщение user37 »

Спасибо за решение!

Доделал его под себя. Посмотрите, пожалуйста, нет ли в нем опасности одновременного обращения к файлу данных Current.dat рабочей программы и самого скрипта. Программа пытается загрузить файл раз в минуту, в случае успеха, удаляет файл.





Код:

Код: Выделить всё

@Echo Off
:: Скрипт подготовки файлов для импорта. 
:: Файлы поступают в папку по электронной почте.
:: Рабочая программа настроена на загрузку данных с файла Current.dat, с последующем его удалением.
:: Обязательно использовать маску, отличную от файла подготовленного к загрузке. Иначе файл будет переименовываться циклично.
Set Where=C:\Exchange\in
Set NewName=Current.dat
Set Maska=d*.dat
:: Ждем появления нового файла данных и удаления подготовленного файла
:Test
IF exist "%Where%\%Maska%" IF not exist "%Where%\%NewName%" GOTO :Beg
GOTO :Test
:: Переименовываем самый старый файл
:Beg
FOR /F "usebackq delims=" %%f IN (`Dir "%Where%\%Maska%" /B /A:-D /O:D`) DO Ren "%Where%\%%f" "%NewName%" & GOTO :Continue
:Continue
sleep 10
GOTO :Test

Конкретизирую вопрос. Свободен ли для доступа файл, в момент проверки IF not exist Current.dat в строке:



Код:

Код: Выделить всё

IF exist "%Where%\%Maska%" IF not exist "%Where%\%NewName%" GOTO :Beg

или на время проверки, на него накладываются какие либо ограничения, и проверку лучше исключить?
Ответить

Вернуться в «Скриптовые языки администрирования Windows»