
批處理如何判斷文件修改日期并移動到某空間求助各位老師,本人在公司里做運維,因服務器硬盤空間所限,所以把數據庫備份放在3個空間,本機G:Data_cope,是數據每天自動備份,本機I:SQL_DB_BAK,是另外一個存儲的空間,局域網共享192.168.163.2可寫入oa_db_bak是第三個可寫入共享空間。舉個例比如今天是20號,局域網可以保留13天的數據,本機I盤可以保留6天,本機G盤可以保留6天.程序先比較局域網共享的備份文件,如果超過25天的數據會刪除,再去比較I盤,如果超過12天的移動到局域網共享空間,最后去比較G盤,如果超過6天會移動到I盤。代碼如下:
- @echo off&setlocal enabledelayedexpansion
- ::設置服務器絕對路徑。
- set services=192.168.163.2可寫入oa_db_bak
- ::設置日常數據庫備份路徑。
- set dbbak=G:Data_cope
- ::設置臨時存儲數據庫路徑。
- set linshi=I:SQL_DB_BAK
- ::設置日志路徑。
- set logtxt=192.168.163.2可寫入log
- ::設置瑞星殺毒服務器(192.168.163.2)數據庫保留的天數
- set DaysAgo=25
- ::設置臨時存儲(I盤)數據庫保留的天數。
- set DaysAgo1=12
- ::設置日常數據庫(G盤)備份保留的天數。
- set DaysAgo2=6
- ::獲取當前日期字符串(d為年月日,t為時分秒,dt為年月日時分秒)。
- for /f tokens=1,2,3 delims=/- %%a in (%date%) do @set D=%%a-%%b-%%c
- rem echo 獲取當前時間字符串
- for /f tokens=1,2,3 delims=:. %%a in (%time%) do @set T=%%a:%%b:%%c
- rem echo 如當前小時小于10,將空格替換為0
- set T=%T: =0%
- set dt=%D% %T%
- ::計算離今天相差“DaysAgo”之前的日期。
- >%temp%MyDate.vbs echo LastDate=date()-%DaysAgo%
- >>%temp%MyDate.vbs echo FmtDate=right(year(LastDate),4) ^& right(0 ^& month(LastDate),2) ^& right(0 ^& day
- (LastDate),2)
- >>%temp%MyDate.vbs echo wscript.echo FmtDate
- for /f %%a in ('cscript /nologo %temp%MyDate.vbs') do (
- set DstDate=%%a
- )
- set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
- echo %DaysAgo%天之前的日期是:%DstDate%。
- echo 正在刪除%DstDate%之前的備份數據庫..
- for /r %services% %%i in (*) do (
- set str=%%~ti
- set str=!str:~0,10!
- ::str為獲取指定文件的修改日期。
- if !str! LEQ %DstDate% del %%i
- )
- echo 機房服務器超過%DaysAgo%天之前在%dt%已經刪除。|>>%logtxt%%d%.txt
- echo 機房服務器超過%DaysAgo%天之前在%dt%已經刪除。
- echo 正在處理本機I盤數據庫備份文件。
- ::計算離今天與%DaysAgo1%之前的日期。
- >%temp%MyDate.vbs echo LastDate=date()-%DaysAgo1%
- >>%temp%MyDate.vbs echo FmtDate=right(year(LastDate),4) ^& right(0 ^& month(LastDate),2) ^& right(0 ^& day
- (LastDate),2)
- >>%temp%MyDate.vbs echo wscript.echo FmtDate
- for /f %%a in ('cscript /nologo %temp%MyDate.vbs') do (
- set DstDate=%%a
- )
- set DstDate1=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
- echo %DaysAgo1%天之前的日期是:%DstDate1%。
- for /r %linshi% %%j in (*) do (
- set str=%%~ti
- set str=!str:~0,10!
- ::str為獲取指定文件的修改日期。
- if !str! LEQ %DstDate1% move %%j %services%
- )
- echo 本機I盤數據庫備份超過%DaysAgo1%天之前在%dt%已經移動到%services%。|>>%logtxt%%d%.txt
- echo 本機I盤數據庫備份超過%DaysAgo1%天之前在%dt%已經移動到%services%。
- pause
- echo 正在處理本機G盤數據庫備份文件。
- ::計算離今天與%DaysAgo2%之前的日期。
- >%temp%MyDate.vbs echo LastDate=date()-%DaysAgo2%
- >>%temp%MyDate.vbs echo FmtDate=right(year(LastDate),4) ^& right(0 ^& month(LastDate),2) ^& right(0 ^& day
- (LastDate),2)
- >>%temp%MyDate.vbs echo wscript.echo FmtDate
- for /f %%a in ('cscript /nologo %temp%MyDate.vbs') do (
- set DstDate=%%a
- )
- set DstDate2=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
- echo %DaysAgo2%天之前的日期是:%DstDate2%。
- for /r %dbbak% %%k in (*) do (
- set str=%%~ti
- set str=!str:~0,10!
- ::str為獲取指定文件的修改日期。
- if !str! LEQ %DaysAgo2% move %%k %linshi%
- )
- echo 本機G盤數據庫備份超過%DaysAgo2%天之前在%dt%已經移動到%linshi%。|>>%logtxt%%d%.txt
- echo 本機G盤數據庫備份超過%DaysAgo2%天之前在%dt%已經移動到%linshi%。
nclick="copycode($('code0'));">復制代碼
現在問題來了,1.增加一個功能,比如程序比較文件時先PING一個局域網共享IP,如果不通,剛在本機某個目錄記錄哪個時間不通。如果通就執行文件移動操作。2.獲取的時間在移動后都是一樣,這個應該在哪里增加,讓代碼結果顯示哪個時間完成操作的?3.不想代碼太過冗長,所以哪里有簡短代碼的地方?