配合Windows計(jì)劃任務(wù),編寫腳本并設(shè)置定時啟動
從192.168.1.1\test文件夾下復(fù)制全部文件到本地test文件夾下,并保留修改時間最近的3個sql文件,刪除其他的sql文件
@echo off&setlocal enabledelayedexpansion xcopy /F /d \\192.168.1.1\test\*.* F:\test\ pushd F:\test\ set n=0 for /f "delims=" %%a in ('dir /a-d-h /b /o-d *.sql') do ( if !n! geq 3 del "%%~a" set /a n+=1 ) popd
腳本說明
xcopy
/f 復(fù)制時顯示源文件名和目標(biāo)文件名。
/d [:MM-DD-YYYY] 僅復(fù)制指定日期或之后更改的源文件。 如果未包含 MM-DD-YYYYY 值,xcopy則復(fù)制比現(xiàn)有目標(biāo)文件更新的所有源文件。 此命令行選項(xiàng)允許更新已更改的文件。
setlocal enabledelayedexpansion 擴(kuò)展本地環(huán)境變量延遲
在cmd執(zhí)行命令前會對腳本進(jìn)行預(yù)處理,其中有一個過程是變量識別過程,在這個過程中,如果有兩個%括起來的如%value%類似這樣的變量,就會對其進(jìn)行識別,并且查找這個變量對應(yīng)的值,再而將值替換掉這個變量,這個替換值的過程,就叫做變量擴(kuò)展,然后再執(zhí)行命令。
但如果出現(xiàn)動態(tài)的情況會怎樣?在cmd執(zhí)行中,發(fā)生動態(tài)的一種情況是在 for語句中進(jìn)行變量賦值。
開啟了變量延遲,在for循環(huán)中每次賦予str的值才會被傳遞下去,但這里的str變量符必須要寫成!str!
Pushd&Popd
Pushd 命令
改變當(dāng)前目錄到指定目錄,并保存當(dāng)前的目錄在堆棧頂端
Popd 命令
改變當(dāng)前目錄,跳轉(zhuǎn)到堆棧頂端保存的目錄,并將堆棧頂端的目錄刪除
for
delims= 用來告訴for每一行應(yīng)該拿什么作為分隔符
用%%a代替循環(huán)中的每一行(每個文件名)
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
set /a 是指定一個變量等于一串運(yùn)算字符
dir /a-d-h /b /o-d *.sql
/a 僅顯示具有指定屬性的目錄和文件的名稱
d - 目錄
h - 隱藏文件
s - 系統(tǒng)文件
可以使用這些值的任何組合,但不要使用空格分隔值。 (可選)可以使用冒號 (:) 分隔符,也可以使用連字符 (-) 作為前綴來表示“not”。 例如,使用 -s 屬性不會顯示系統(tǒng)文件
/b 顯示目錄和文件的裸列表,沒有其他信息
/o[[:]] 根據(jù) sortorder 對輸出進(jìn)行排序,它可以是以下值的任意組合
d - 按日期/時間,最早-使用前綴反轉(zhuǎn)排序順序
獲取昨天的日期并格式化輸出
配合vbs腳本
:: yesterdays date @echo off set day=-1 echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s) echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2) for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a" del "%temp%\%~n0.vbs" set "YYYY=%result:~0,4%" set "MM=%result:~4,2%" set "DD=%result:~6,2%" set "data=%yyyy%-%mm%-%dd%" echo Yesterday was "%data%" pause
建站咨詢熱線
029-33273980