<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 262,  comments - 221,  trackbacks - 0

    一、需求介紹:

    最近客戶提出一個需求:在一臺windows 2000 Server的服務器上寫一個腳本:刪除指定目錄下N天前創建的文件、目錄。由于該服務器并沒有安裝任何的開發平臺,所以只能依靠Windows自帶的批處理命令和VBS腳本來完成這個功能了。

    二、代碼示例及分析:

    由于以前沒有接觸過Windows批處理命令,所以臨時從網上找了一個例子,下面你看到的代碼大部分就是來自于這個例子(除了綠色高亮處等處)。這個cmd文件分為兩部分,首先生成一個vbs腳本文件,這個腳本文件用于計算刪除的截止時間,然后遞歸地在指定目錄下搜索符合條件的資源,刪除它之后寫入日志文件delete_log.log。

    @echo off

    attrib +r del_day.cmd【1】

    >t_day.vbs  echo ' Yesterday.vbs,  Version 1.01                          
    >>t_day.vbs echo '                                                      
    >>t_day.vbs echo ' Written by Rob van der Woude                         
    >>t_day.vbs echo ' http://www.robvanderwoude.com                        
    >>t_day.vbs echo '                                                     
    >>t_day.vbs echo ' Calculate yesterday's date                           
    >>t_day.vbs echo    dtmYesterday = DateAdd("d",-%1,Date)              
    >>t_day.vbs echo '                                                      
    >>t_day.vbs echo ' Get yesterday's year                                 
    >>t_day.vbs echo    strYear      = DatePart("yyyy",dtmYesterday)        
    >>t_day.vbs echo '                                                    
    >>t_day.vbs echo ' Get yesterday's month, add leading zero if necessary 
    >>t_day.vbs echo    If DatePart("m",dtmYesterday) ^< 10 Then            
    >>t_day.vbs echo        strMonth = 0 ^& DatePart("m",dtmYesterday)       
    >>t_day.vbs echo    Else                                                
    >>t_day.vbs echo        strMonth = DatePart("m",dtmYesterday)           
    >>t_day.vbs echo    End If                                              
    >>t_day.vbs echo '                                                      
    >>t_day.vbs echo ' Get yesterday's day, add leading zero if necessary  
    >>t_day.vbs echo    If DatePart("d",dtmYesterday) ^< 10 Then            
    >>t_day.vbs echo       strDay = 0 ^& DatePart("d",dtmYesterday)        
    >>t_day.vbs echo    Else                                               
    >>t_day.vbs echo       strDay = DatePart("d",dtmYesterday)            
    >>t_day.vbs echo    End If                                              
    >>t_day.vbs echo '                                                     
    >>t_day.vbs echo ' Format output for yesterday                          
    >>t_day.vbs echo   strYest = strYear ^& strMonth ^& strDay【2】
    >>t_day.vbs echo '                                                     
    >>t_day.vbs echo ' echo                                                 
    >>t_day.vbs echo Wscript.echo( strYest )                                

    @echo 
    on 
    set dirPath=%~1
    cd  dirPath

    del 
    /q delete_log.log
    for /"delims=" %%i in ('cscript.exe //nologo t_day.vbs') do set t_day=%%i && echo delete files or directories which last modified date before date: %%i >> delete_log.log && echo ================================================ >> delete_log.log
    setlocal ENABLEDELAYEDEXPANSION

    for /r %%i in (*.*do  set c_day=%%~ti && if "!c_day:~6,2!!c_day:~0,2!!c_day:~3,2!" lss "%t_day:~2,6%"【3】 echo delete file : "%%i" Last Modified day is : "%%~ti" >>delete_log.log && del /q "%%i" 【4】
    endlocal

    @echo 
    =========================
    @echo 刪除完畢.
    @echo 
    =========================

    cls
    @echo off
    del t_day.vbs【5】
    attrib -r del_day.cmd【6】

    下面重點介紹代碼中綠色高亮處的作用,這是我修改例子來滿足實際需要的改動:

    attrib +r del_day.cmd:
    這個命令是用于改變指定文件的系統屬性的,+/-分別代表增加,撤銷某種屬性,r/h則代表read_only和hidden。del_day.cmd則是這個腳本的名字。為什么要加上這一句呢?因為我們的這個腳本是需要刪除N天前創建的文件,假如我們在一段時間后再次執行這文件,那么程序在刪除其他文件的同時會連同自己一塊刪除,“同歸于盡”了。所以要把這個文件在每次執行時變成只讀的。

    strYest = strYear ^& strMonth ^& strDay:
    這句話的作用很明顯卻是整個vbs腳本的精髓:它將前面各個部分的值拼接成類似:20080715這樣的格式并返回該字符串。

    set c_day=%%~ti && if "!c_day:~6,2!!c_day:~0,2!!c_day:~3,2!" lss "%t_day:~2,6%":
    這句話就是刪除的條件了!首先%%~ti是拿到每個文件的“Last modified date”屬性,然后賦給變量:c_day,賦值后c_day的值類似于07/15/08 16:05p。c_day:~6,2的作用是截取該變量從位置6開始的2個字符(注意從0開始計數),也就是年份08了,后面的c_day:~0,2是截取月份07,而c_day:~3,2則很明顯是日期15。這一切做完后拼接起來和變量c_day的后6個字符串比較(也就是080715)。

    注意:注意這里的c_day和t_day的值的格式會因為操作系統和時區、語言集的不同而不同,原代碼中的if部分的邏輯和這里不同,我將其改為適合于中文的環境。

    如果你不確定你本機的時間日期格式是什么,可以在DOS下執行date命令,如下圖所示:
    C:\Documents and Settings\qlinpen.E0015609D6309>date
    The current 
    date is07/15/2008 Tue

     >>delete_log.log && del /q "%%i"
    在判斷文件符合刪除條件后,我們首先使用echo寫日志,注意>>這個重定向符的作用,它使用“append”的方式將echo輸出的內容追加到文本delete_log.log文件中,&&是一個組合命令,它使到第一條命令執行成功后緊接著執行后面一條命令。但前提是第一條命令必須成功執行,如果失敗了則&&后面的命令不被執行。如果你希望無論如何都要執行后面的命令,則你可以使用&代替&&。

    del /q %%i這個命令中參數/q的作用是在不詢問用戶的情況直接刪除,而且是不可恢復的刪除,使用起來必須很小心。如果使用/p做參數,則在windows每次刪除前會出現提示信息,在用戶確認后才刪除。%%i則是當前文件名的引用。

    ⑤del t_day.vbs:
    還記得前面我們說過:這個cmd文件分為兩部分,第一部分就是創建一個t_day.vbs腳本,這句話就是刪除這個臨時使用的vbs文件。

    ⑥attrib -r del_day.cmd:
    在命令執行完成后,修改cmd文件的屬性為可寫,方便后面對程序的擴展。

    結論:在可能的情況下,使用windows自帶的命令和vbs腳本也可以高效、快速的完成任務,特別是對系統資源的訪問、操作。

    附:
    Windows批處理命令詳解
    Windows 2003 Server自帶的批量刪除N天前文件命令


    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2008-07-11 15:56 Paul Lin 閱讀(6067) 評論(0)  編輯  收藏 所屬分類: 其它技術
    <2008年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 最近中文字幕大全免费视频| 免费国产va视频永久在线观看| 一级毛片免费观看不卡视频| 久久精品国产亚洲香蕉| 成人片黄网站色大片免费观看APP| 中文字幕亚洲乱码熟女一区二区| 一区二区三区免费视频网站| 中文字幕亚洲综合久久男男| a级毛片免费在线观看| 亚洲av中文无码乱人伦在线播放| 国内精品久久久久影院免费| 亚洲成色WWW久久网站| 777成影片免费观看| 亚洲精品成人网站在线播放| 日韩免费一区二区三区在线 | 久久亚洲精品AB无码播放| 人妻在线日韩免费视频| 666精品国产精品亚洲| 日韩免费一区二区三区在线| 国产AV无码专区亚洲AV麻豆丫 | 精品视频一区二区三区免费| 亚洲天堂一区二区| 国产在线观看免费观看不卡 | 天堂在线免费观看| 99久久亚洲综合精品成人网| 国产精品视频永久免费播放| 国产亚洲蜜芽精品久久| 久久夜色精品国产亚洲| 5g影院5g天天爽永久免费影院| 在线a亚洲老鸭窝天堂av高清| 亚洲国产精品自在拍在线播放| 日韩电影免费在线观看网站| 亚洲av片不卡无码久久| 免费人成在线观看视频播放| 久久免费区一区二区三波多野| 亚洲天堂免费在线| 国产成人亚洲精品狼色在线| 久久精品免费全国观看国产| 永久免费无码日韩视频| 亚洲国产精品美女| 亚洲深深色噜噜狠狠爱网站|