2013-09-14 3 views
0

Мне нужно написать файл .bat для резервного копирования. Уже .bat файл работает успешно в ниже формате:Получение предыдущего имени месяца - командный файл

2013-12-08
2013-13-08
2013-14-08
.
.
.
2013-12-09
2013-13-09
2013-14-09

Это занимает больше места на нашем сервере & мы удаление старых файлов вручную. Поэтому мне нужно, чтобы .bat автоматически удалял файлы предыдущего месяца.

ответ

1

Вы можете использовать команду forfiles если вы на Windows Vista или до

forfiles /D -30 /P C:\your\backyup\folder\ /M *.bak /C "del @file " 

если вы нормально, чтобы удалить 30 дней старые файлы, которые примерно в месяц, но не принимает во внимание текущие /предыдущий месяц.

+0

Это удалит файлы, созданные в течение последних 30 дней, включая текущий месяц файл, если он уже существует. – Cragmonkey

2

Пакетный файл ниже предполагает, что формат, отображаемый командой echo %date%, - YYYY-DD-MM; если это не так, требуется небольшая корректировка.

EDIT: Я изменил Пакетный файл ниже, чтобы избежать ошибок сообщили в комментарии:

@echo off 
setlocal EnableDelayedExpansion 

rem Get the previous month 
for /F "tokens=1,3 delims=-" %%a in ("%date%") do (
    set prevYear=%%a 
    set month=%%b 
) 
if "%month:~0,1%" equ "0" set month=%month:~1% 
set /A prevMonth=month-1 
if "%prevMonth%" equ "0" (
    set /A prevMonth=12, prevYear-=1 
) 
if %prevMonth% lss 10 set prevMonth=0!prevMonth! 

rem Delete the files of previous month 
for /F "tokens=1-3 delims=-" %%a in ('dir /B *.*') do (
    if %%c equ %prevMonth% del %prevYear%-%%b-%%c 
) 
+0

это не работает, сообщение об ошибке «1! был неожиданным в это время. ', лучше: 'if'! month: ~ 0,1!" equ "0" (и я не знаю, почему это «замедленное расширение»?). Вам также нужно лечение за январь, '00' недействительно :) – Endoro

+0

Вы правы! Обе детали теперь исправлены ... – Aacini

Смежные вопросы