forfiles命令批量刪除N天前文件


     在整理手上幾台SQL SERVER 2000的數據庫備份時,一方面為了方便快速還原數據庫,另外一方面為了備份冗余、備份方式統一(先備份到本地,然后收上磁帶),將以前通過Symantec Backup Exec直接備份上帶的作業改成了如下方式:

    Step 1: 通過數據庫維護計划將備份生成在本地磁盤M,完整備份保留2天,事務日志備份保留3天

            M:\DB_BACKUP\FULL_BACKUP

            M:\DB_BACKUP\LOG_BACKUP

    Step 2:  備份完成后通過Symantec Backup Exec將備份文件收上磁帶。

但是發現即使SQL SERVER 2000的數據庫維護計划設置了刪除幾天前的備份文件,但是發現根本沒有刪除過期備份。於是只好使用dos命令來處理。剛開始想用forfiles命令,結果我搜索的時候,發現Windows 2000下沒有forfiles命令,后來通過從第三方復制過來,發現Windows 2000下也可以使用forfiles(如果不借助於forfiles命令,直接用批處理命令完成這個,那簡直痛苦死了)

關於forfiles命令的語法如下所示

 

C:\>forfiles /?

FORFILES [/P pathname] [/M searchmask] [/S]

         [/C command] [/D [+ | -] {yyyy-MM-dd | dd}]

Description:

    Selects a file (or set of files) and executes a

    command on that file. This is helpful for batch jobs.

Parameter List:

    /P    pathname      Indicates the path to start searching.

                        The default folder is the current working

                        directory (.).

    /M    searchmask    Searches files according to a searchmask.

                        The default searchmask is '*' .

    /S                  Instructs forfiles to recurse into

                        subdirectories. Like "DIR /S".

    /C    command       Indicates the command to execute for each file.

                        Command strings should be wrapped in double

                        quotes.

                        The default command is "cmd /c echo @file".

                        The following variables can be used in the

                        command string:

                        @file    - returns the name of the file.

                        @fname   - returns the file name without

                                   extension.

                        @ext     - returns only the extension of the

                                   file.

                        @path    - returns the full path of the file.

                        @relpath - returns the relative path of the

                                   file.

                        @isdir   - returns "TRUE" if a file type is

                                   a directory, and "FALSE" for files.

                        @fsize   - returns the size of the file in

                                   bytes.

                        @fdate   - returns the last modified date of the

                                   file.

                        @ftime   - returns the last modified time of the

                                   file.

                        To include special characters in the command

                        line, use the hexadecimal code for the character

                        in 0xHH format (ex. 0x09 for tab). Internal

                        CMD.exe commands should be preceded with

                        "cmd /c".

    /D    date          Selects files with a last modified date greater

                        than or equal to (+), or less than or equal to

                        (-), the specified date using the

                        "yyyy-MM-dd" format; or selects files with a

                        last modified date greater than or equal to (+)

                        the current date plus "dd" days, or less than or

                        equal to (-) the current date minus "dd" days. A

                        valid "dd" number of days can be any number in

                        the range of 0 - 32768.

                        "+" is taken as default sign if not specified.

    /?                  Displays this help message.

Examples:

    FORFILES /?

    FORFILES

    FORFILES /P C:\WINDOWS /S /M DNS*.*

    FORFILES /S /M *.txt /C "cmd /c type @file | more"

    FORFILES /P C:\ /S /M *.bat

    FORFILES /D -30 /M *.exe

             /C "cmd /c echo @path 0x09 was changed 30 days ago"

    FORFILES /D 2001-01-01

             /C "cmd /c echo @fname is new since Jan 1st 2001"

    FORFILES /D +2014-12-15 /C "cmd /c echo @fname is new today"

    FORFILES /M *.exe /D +1

    FORFILES /S /M *.doc /C "cmd /c echo @fsize"

    FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

 

對應的中文提示信息如下所示:

語法
forfiles [/p Path ] [/m SearchMask ] [/s ] [/c Command ] [/d [{+ | - }] [{MM / DD / YYYY | DD }]]
參數
/p Path
指定Path ,表明要從哪里開始搜索。默認的文件夾是當前工作目錄,該目錄通過鍵入句號(.) 指定。
/m SearchMask
按照SearchMask 搜索文件。默認的SearchMask 是*.* 。
/s
指示forfiles 在子目錄中搜索。
/c Command
在每個文件上運行指定的Command 。帶有空格的命令字符串必須用引號括起來。默認的Command 是"cmd /c echo @file" 。
/d [{+ | - }] [{MM / DD / YYYY | DD }]
選擇日期大於或等於(+ )(或者小於或等於(- ))指定日期的文件,其中MM / DD / YYYY 是指定的日期,DD 是當前日期減去DD 天。如果未指定+ 或- ,則使用+ 。DD 的有效范圍是0 - 32768。
/?
在命令提示符下顯示幫助。

如下所示,由於Windows Server 2000下拷貝過來的forfiles命令的版本是V 1.1,使用參數必須為-p、-c、-m 而且參數后面不能有空格。

clipboard

如下所示,delete_old_backup.bat 刪除2天前的完整備份、事務日志備份、以及維護計划生成的日志文件。

echo  --------------------------------------------- >>delete_old_backup.log 
 
echo Delete the backup log start at %Date% - %time% >>delete_old_backup.log 
 
rem Delete days. 
 
set DaysAgo=2 
 
rem delete old backup log files. 
 
set LogPath=M:\DB_BACKUP\ 
 
forfiles -p%LogPath% -m*.txt -d-%DaysAgo% -c"cmd /c del /q @FILE" >> delete_old_backup.log 
 
echo Delete the backup log Stop at %Date% - %time% >>delete_old_backup.log 
 
echo Delete the full backup start at %Date% - %time% >>delete_old_backup.log 
 
set FullBackupPath=M:\DB_BACKUP\FULL_BACKUP 
 
forfiles -p%FullBackupPath% -m*.bak -d-%DaysAgo% -c"cmd /c del /q @FILE" >> delete_old_backup.log 
 
echo Delete the full backup Stop at %Date% - %time% >>delete_old_backup.log 
 
echo Delete the log backup start at %Date% - %time% >>delete_old_backup.log 
 
set LogBackupPath=M:\DB_BACKUP\LOG_BACKUP 
 
forfiles -p%LogBackupPath% -m*.TRN -d-%DaysAgo% -c"cmd /c del /q @FILE" >> delete_old_backup.log 
 
echo Delete the log backup Stop at %Date% - %time% >>delete_old_backup.log 
 
echo  --------------------------------------------- >>delete_old_backup.log

 

腳本編寫、測試成功后,然后設置Task Schedule,大體步驟如下步驟所示:

Step 1:在控制面板找到任務計划,執行任務計划向導:

clipboard[7]

Step 2: 點擊“瀏覽”按鈕,選擇M:\DB_BACKUP\delete_old_backup.bat文件

clipboard[8]

Step 3:輸入任務的名稱,以及執行任務的Schedule

clipboard[9]

Step 4:設置任務執行的時間以及頻率

clipboard[10]

Step 5:輸入知曉計划任務的賬號以及密碼

clipboard[11]

Step 6:完成任務計划設置。

clipboard[12]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM