バッチコマンドforfiles構文のインスタンスの詳細

5358 ワード

まず、forfilesはWindows Server 2003に内蔵されたコマンドラインファイルであり、他のシステムが必ずしも適用されるとは限らないことについて説明する.ただし、win 2003以上のシステムは、win 7、windows server 2008を含めて適用されますよ.
forfilesの例を見てみましょう.
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-Disk Rootディレクトリの最後の変更日が2010年1月7日以上のファイルをD-Disk Rootディレクトリにコピーするには、次の手順に従います.

    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[{+|-}][{|}]:ファイルを選択したい最後の修正時間を指定し、上記では当日をベースに7日前のすべてのファイルを「/d-7」で表しています.もちろん、ここでは、「/d-01/7/2010」のような2010年1月7日より早いすべてのファイルを指定することもできます.注意指定された時間は「MM/D/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」
ここでの「フォルダを含むパス」には、上記のコードで示すように、削除するフォルダを含めることはできません.LogFilesという名前のファイルまたはフォルダをFディスクで検索します(検索フォルダは指定できませんが、削除時に判断しました).現在のファイルタイプがフォルダタイプであるかどうかを判断するための新しいパラメータ'@ISDIR'が表示されます.で、そうであればtrue、そうでなければfalseです.最後に、コードをバッチ・ファイルとして保存し、計画タスクに追加して定期的に実行します.
バッチ・ファイルの内容を共有します.
 
   

@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のヘルプとサポートドキュメントを参照してください.使い方については、forfiles/?を参照してください.