Пакетный скрипт Windows для переименования и удаления файлов в зависимости от расширения и времени создания - PullRequest
0 голосов
/ 14 декабря 2011

У нас есть программа, которая берет определенные XML-файлы и импортирует их, а затем изменяет файл с .xml на .tmp.Как только он превратится в .tmp, мы можем удалить файл.

Иногда случается, что файл XML не импортируется должным образом, и в этом случае он переименовывается из .xml в .bad, и файл должен быть вручнуюотрегулирован (может быть неправильный XML-файл или что-то еще).Мы обнаружили, что примерно в 90% случаев, когда вы переименовываете файл обратно в .xml, он хорошо импортируется.

Я создал пакетный скрипт для запуска каждые пару минут, который автоматически удаляет файл.TMP файлы.Я также хочу добавить что-то в скрипт, который переименовывает файл .bad в .xml, чтобы позволить программе попробовать и импортировать его снова.Это покроет 90%.

Чтобы покрыть последние 10%, я бы хотел настроить его так, чтобы примерно через 10 минут он больше не пытался переименовать файл .bad обратно.xml (на основе даты создания).

Пока что у меня есть скрипт для удаления файлов .tmp:

forfiles -p "C:\path\to\xml" -m *.tmp -c "cmd /c del @PATH"

И у меня есть скрипт для переименования .bad в.xml:

forfiles -p "C:\path\to\xml" -m *.bad -c "cmd /c ren *.bad *.xml"

Как мне указать 2-й команде делать это только для файлов, дата создания которых (не дата последнего изменения) была менее 10 минут назад?

Обновлено:

Вот полное решение (спасибо Джону Z за указание в правильном направлении):

powershell.exe -command "get-childitem 'path\to\xml' -filter *.tmp | Remove-Item"

powershell.exe -command "get-childitem 'path\to\xml' -filter *.bad | where-object {$_.creationtime -gt (get-date).addminutes(-8)} | foreach-object {move-item $_.fullname ($_.fullname-replace '.bad','.xml')}"

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Если в качестве опции можно использовать powershell вместо cmd, вы можете сделать следующее:

для удаления файлов:

get-childitem c:\path\to\xml -filter *.tmp | remove-item

чтобы переименовать .bad в .xml

get-childitem c:\path\to\xml -filter *.bad |  where-object {$_.creationtime -gt (get-date).addminutes(-10)} | foreach-object {move-item $_.fullname ($_.fullname -replace '.bad','.xml')}
1 голос
/ 14 декабря 2011

Предполагая, что если файл дважды терпит неудачу, он никогда не будет успешным, тогда вместо простого переименования файлов .bad в .xml вы можете создать файл отслеживания (назовем его .trk).В следующий раз удалите все старые .trk-файлы и все соответствующие .bad-файлы, которые все еще там (так как это означает, что файл дважды потерпел неудачу), прежде чем отслеживать оставшиеся .bad-файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...