DOS批處理檔案以及目錄

2021-05-21 20:33:01 字數 4656 閱讀 7959

windows server 2003內建的命令列檔案,不適合於xp系統

1. 用批處理檔案刪除當前目錄下 7 天以前的擴充套件名為bkf檔案(以當前系統時間為基準)

示例: forfiles /m *.bkf /d -7 /c "cmd /c del @file /f"

2. forfiles 自動刪除7天前檔案 (以當前系統時間為基準)

示例: forfiles /p "d:/test" /s /m *.* /d -7 /c "cmd /c del @path"

d:/test換成你要的目錄路徑; /d -7 指刪除7天以前檔案。

3. 刪除所有的空目錄(以刪除d:/test目錄下為例) :

dir /ad/b/s d:/test/ |sort /r >d:/kill.txt

for /f "tokens=*" %%i in (d:/kill.txt) do rd "%%i"

del d:/kill.txt

4. 先刪7 天以前檔案,再刪所有的空目錄 ;把以下複製到bat檔案中。

@echo off

forfiles /p "d:/test" /s /m *.* /d -7 /c "cmd /c del @path"

dir /ad/b/s d:/test/ |sort /r >d:/kill.txt

for /f "tokens=*" %%i in (d:/kill.txt) do rd "%%i"

del d:/kill.txt

5. forfiles 命令的用法及引數:

forfiles /p 《目標目錄名》 /d 《天數》 /c 《執行的命令》

/p 指定了要在哪個目錄裡查詢檔案,預設是當前工作目錄。

/d 指定乙個日期或天數,用於比較檔案的最後修改日期是否符合條件。

/c 對每個找到的檔案執行的命令。

例1.要把在c盤根目錄下最後修改日期大於或等於2023年1月7日的檔案複製到d盤根目錄下:

forfiles /p "c:/" /d "2007-7-1" /c "cmd /c copy @path d:/"

例2.刪除在c盤backup目錄下最後修改日期在10天前的檔案:

forfiles /p "c:/backup" /d -10 /c "cmd /c echo deleting @file ... && del /f @path"

6. forfiles /p 包含要刪除檔案的完整路徑(如:f:/logfiles) /m *.log -d -7 /c "cmd /c del /f

@path"

解釋一下相關引數及命令

/p : 指定開始搜尋檔案的位置,如果不指定則預設為當前目錄。

/m : 檔案查詢所使用的萬用字元如**中的"*.log"則為所有日誌檔案,當然也可以指定諸

如"manmee_*.log"這樣以manmee開頭的所有日誌檔案。如果不指定此引數則預設為"*.*"。

/d : 指定想選擇檔案的最後修改時間,上文中用了 "/d -7" 表示所有以當

天為基礎,7天以前的檔案。當然這裡還可以指定具體時間,例如:"/d -01/7/2010"這樣所有早於2023年

1月7日的檔案。注意指定的時間必須是"mm/dd/yyyy"的格式。

/c 對所有檔案以此執行指定的命令,命令體須在雙引號(")內,預設是"cmd /c echo @file"。上文中用

到的是"cmd /c del /f @path"刪除指定檔案。(這裡的@file 和 @path 為變數,下文中將解釋。)

下面說一下上文中用到的引數:

@path : 表示檔案的完整的路徑。

@file : 表示檔名稱。

接下來我們看看刪除資料夾的操作,如果你看了上面的介紹,相信這命令你一看就能看懂。

forfiles /p 包含資料夾的路徑(如:f:/) /m 資料夾名稱(如:logfiles) -d 0 /c "cmd /c if @isdir

== true rd /s/q @path"

注意這裡的"包含資料夾的路徑"不能包含要刪除的資料夾,如以上**所表示的就是,在f盤中查詢名為

logfiles的檔案或資料夾(不能指定查詢檔案夾,不過在刪除時我們做了判斷)。

還有就是這裡出現了乙個新的引數"@isdir"他用於判斷當前檔案型別是否是"資料夾型別",如果是則為

true否則為false。

相信到這大家就明白了,最後再將**儲存為批處理檔案,然後加入計畫任務定期執行即可。

看了上面的例子,覺得在 windows server 2003 下面要刪除老檔案很簡單吧。

但如果作業系統是 windows 2000/xp 就比較麻煩,因為它們沒有forfiles命令,只能靠自己寫批處理來

實現了。

下面是我寫的批處理檔案內容:

@echo off

rem ******************************

rem * 按時間刪除檔案目錄的批處理 *

rem ******************************

rem 設定臨時目錄的路徑

set tempdir=%tmp%/remove_%date:~0,10%

if not exist %tempdir% md %tempdir%

rem 設定處理日期的指令碼檔案的路徑

set scriptfile=%tempdir%/get_date.vbs

rem 獲得要保留的天數

set days=%~1

if "%days%" == "" goto printusage

rem 獲得目標目錄的路徑

set dirpath=%~2

if "%dirpath%" == "" set dirpath=.

rem 獲得要操作的檔案形式

set filespec=%~3

if "%filespec%" == "" set filespec=*.*

rem 生成計算日期的指令碼檔案並獲得刪除的截止日期

echo d=date()-%1 > %scriptfile%

echo s=right("0000" ^& year(d),4) ^& "-" ^& right("00" ^& month(d),2) ^& "-" ^& right("00"

^& day(d),2) >> %scriptfile%

echo wscript.echo s >> %scriptfile%

for /f %%i in ('cscript /nologo %scriptfile%') do set lastdate=%%i

rem 處理目標目錄裡的每個物件

for /f "tokens=1,2,3* delims=<> " %%i in ('dir "%dirpath%/%filespec%" /a /-c /tc') do call

:proc "%%i" "%%j" "%%k" "%%l"

goto :done

rem 處理目標目錄裡物件的過程

:proc

rem 獲得物件的建立日期並判斷是否為有效格式

set filedate=%~1

echo %filedate% | findstr "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" > nul

if errorlevel 1 goto end

rem 獲得物件的型別

set filetype=%~3

if "%filetype%" == "" goto end

rem 獲得物件的名稱

set filename=%~4

if "%filename%" == "" goto end

if "%filename%" == "." goto end

if "%filename%" == ".." goto end

if "%filename%" == "位元組" goto end

if "%filename%" == "可用位元組" goto end

rem 判斷物件日期是否小於或等於刪除的截止日期

if "%filedate:~0,10%" leq "%lastdate%" (

echo deleting "%filename%" ...

if "%filetype%" == "dir" ( rd /s /q "%dirpath%/%filename%" ) else ( del /q /f "%dirpath%/%

filename%" )

)goto end

:error

echo an error occurred during backuping.

:done

rd /s /q %tempdir%

goto end

:printusage

echo usage: %0 ^[work directory] [target file specification (can include wildcards)]

goto end

:end

主要是利用windows的指令碼功能來計算要刪除檔案的截止日期,然後for加dir命令來提取檔案的日期進行

判斷。關於forfiles和for的詳細資訊,可以在windows的幫助與支援中找到。

DOS批處理檔案

dos下的可執行檔案有三種,分別是exe,com和bat。其中,exe和com檔案都是二進位制形式的,只有bat檔案是文字形式的,可以直接閱讀。因此,bat檔案和以上二進位制可執行檔案相比,內容要簡單的多。這些檔案內包含著dos命令的集合,通常叫作批處理檔案。批處理檔案的組成雖然比較簡單,但其用處非...

DOS批處理檔案

dos下的可執行檔案有三種,分別是exe,com和bat。其中,exe和com檔案都是二進位制形式的,只有bat檔案是文字形式的,可以直接閱讀。因此,bat檔案和以上二進位制可執行檔案相比,內容要簡單的多。這些檔案內包含著dos命令的集合,通常叫作批處理檔案。批處理檔案的組成雖然比較簡單,但其用處非...

DOS 批處理檔案

dos 下的可執行檔案有三種,分別是exe,和bat。其中,exe和 檔案都是二進位制形式的,只有bat檔案是文字形式的,可以直接閱讀。因此,bat檔案和以上二進位制可執行檔案相比,內容要簡單的多。這些檔案內包含著dos命令的集合,通常叫作批處理檔案。批處理檔案的組成雖然比較簡單,但其用處非常大,使...