質問

いなければならないというニーズファイルを全部削除してください以上7日間のバッチファイルです。私を中心に検索ウェブ、その例を数行のコードおよびその他の必要な設置に追加コマンドラインユーティリティを達成するのです。

類似のもので 行BASH でカップルで行います。ことも少なく遠隔から簡単れている間に行うことができるバッチファイルです。私のようなソリューションと標準的なコマンドプロンプトに、追加できます。くださいませPowerShellまたはCygwinます。

役に立ちましたか?

解決

お楽しみ:

forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"

forfile書 できます。

詳しグッツ、 An A-ZのインデックスWindows XPコマンドライン.

がない場合 forfiles インストール機にコピーしてから Windows Server2003年 ごWindows XP機 %WinDir%\system32\.ことが可能で、エグゼは完全対応とWindows Server2003、Windows XPの場合.

降のバージョンのWindowsおよびWindowsサーバーが設置されるデフォルトです。

Windows7以上を含むwindows10):

の文法が少し変わりました。そのため、更新のコマンド:

forfiles /p "C:\what\ever" /s /m *.* /D -<number of days> /C "cmd /c del @path"

他のヒント

以下の コマンド:

ROBOCOPY C:\source C:\destination /mov /minage:7
del C:\destination /q

移動しているため、すべてのファイルの利用mov、それぞれの長所を取り入れたファイルを削除してはな移動のそれぞれの長所を取り入れた全filetreesを削除)robocopyを別の場所に、その実行を削除コマンドへの歩みを、みんな良いです。

また、お客様がディレクトリのデータで利用できる /mir スイッチ

Ok飽きたらしくシェアしてみて、私のバージョンの貧しい人間のLinuxの画期的な交換限定で日常使用時間保持):

7daysclean.cmd

@echo off
setlocal ENABLEDELAYEDEXPANSION
set day=86400
set /a year=day*365
set /a strip=day*7
set dSource=C:\temp

call :epoch %date%
set /a slice=epoch-strip

for /f "delims=" %%f in ('dir /a-d-h-s /b /s %dSource%') do (
    call :epoch %%~tf
    if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)
)
exit /b 0

rem Args[1]: Year-Month-Day
:epoch
    setlocal ENABLEDELAYEDEXPANSION
    for /f "tokens=1,2,3 delims=-" %%d in ('echo %1') do set Years=%%d& set Months=%%e& set Days=%%f
    if "!Months:~0,1!"=="0" set Months=!Months:~1,1!
    if "!Days:~0,1!"=="0" set Days=!Days:~1,1!
    set /a Days=Days*day
    set /a _months=0
    set i=1&& for %%m in (31 28 31 30 31 30 31 31 30 31 30 31) do if !i! LSS !Months! (set /a _months=!_months! + %%m*day&& set /a i+=1)
    set /a Months=!_months!
    set /a Years=(Years-1970)*year
    set /a Epoch=Years+Months+Days
    endlocal& set Epoch=%Epoch%
    exit /b 0

用途

set /a strip=day*7 :変化 7 のための日数にしておきましょう。

set dSource=C:\temp :ここからディレクトリをチェックのためのファイルです。

注記

結合相を基本組成とした非破壊でコードが表示されますので思いました。

変更:

if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)

るようなもの:

if !epoch! LEQ %slice% del /f %%f

うファイルが実際に削除されると

:はハードコードされた28日です。Bissextile年は地獄を追加します。れば誰かがアイディアを考えていない追加の10行のコードは見ていて気分が良いものポストで追加でコードです。

画期的な:なかったのに時間を考慮して、必要なのは削除する以前のファイルが一定の日付、時間/分が削除されたファイルからの日とする意味がありました。

制限

画期的な 間当たり前の短日付フォーマットはYYYY-MM-DD.う必要があると思われる予測を算出するのに使用した、その他の設定または実行時の評価(読みsShortTime、ユーザー結合の構成、設定、適切なフィールド順にフィルタ、フィルターを使用することで抽出し、正しいデータからの引数).

くさんありどれも美味しているこのエディタの自動formating?すので空白行やコピー-ペーストは地獄である。

この助けになっていますよ。

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

にするべきなの /d -3 (3日前この動作します。そしてこの複雑なバッチでできたゴミ箱にします。も forfiles なUNCパスでのネットワーク接続を特定します。

て差し替えによって、様々な 答え類似の問題:

REM del_old.bat
REM usage: del_old MM-DD-YYY
for /f "tokens=*" %%a IN ('xcopy *.* /d:%1 /L /I null') do if exist %%~nxa echo %%~nxa >> FILES_TO_KEEP.TXT
for /f "tokens=*" %%a IN ('xcopy *.* /L /I /EXCLUDE:FILES_TO_KEEP.TXT null') do if exist "%%~nxa" del "%%~nxa"

この削除以前のファイルされます。いいただけるのは間違いなしで変更可能で戻日から現在の日付です。

更新: とは思HerbCSO改善します。私の使用をお勧めし 彼の版 です。

私のコマンド

forfiles -p "d:\logs" -s -m*.log -d-15 -c"cmd /c del @PATH\@FILE" 

@PATH だけではなく、経路に私の場合、利用いただ @PATH\@FILE

forfiles /? 働いていない私にとっても forfiles ("?") 現代美術館などがあります。

とみいい追加方法については複数のマスク(たとえば".log|.bak")?

すべてのことに関してforfiles.exe その ダウンロードはこちらからどうぞ (win XP)

ものをご使用の場合はWindowsサーバー forfiles.exe すべきでありが異なftpバージョン。そのため、私修コマンドです。

Windows Server2003を使用しているこのコマンド:

forfiles -p "d:\Backup" -s -m *.log -d -15 -c "cmd /c del @PATH"

Windows Server2008R2:

forfiles /P c:\sql_backups\ /S /M *.sql /D -90 /C "cmd /c del @PATH"

このすべて削除する .sql 以前のファイル 90 ます。

このコードをコピーして保存しまDelOldFiles.vbs.

ご利用にのみコマンドプロンプト:cscript DelOldFiles.vbs15

15を削除ファイル以前の15日間です。

  'copy from here
    Function DeleteOlderFiles(whichfolder)
       Dim fso, f, f1, fc, n, ThresholdDate
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set f = fso.GetFolder(whichfolder)
       Set fc = f.Files
       Set objArgs = WScript.Arguments
       n = 0
       If objArgs.Count=0 Then
           howmuchdaysinpast = 0
       Else
           howmuchdaysinpast = -objArgs(0)
       End If
       ThresholdDate = DateAdd("d", howmuchdaysinpast, Date)   
       For Each f1 in fc
     If f1.DateLastModified<ThresholdDate Then
        Wscript.StdOut.WriteLine f1
        f1.Delete
        n = n + 1    
     End If
       Next
       Wscript.StdOut.WriteLine "Deleted " & n & " file(s)."
    End Function

    If Not WScript.FullName = WScript.Path & "\cscript.exe" Then
      WScript.Echo "USAGE ONLY IN COMMAND PROMPT: cscript DelOldFiles.vbs 15" & vbCrLf & "15 means to delete files older than 15 days in past."
      WScript.Quit 0   
    End If

    DeleteOlderFiles(".")
 'to here

利用forfiles.

ができます。早いものを使用unixスタイルパラメータ。

私のバージョン(サーバ2000年ませんのでご注意スペース後のスイッチ)-

forfiles -p"C:\what\ever" -s -m*.* -d<number of days> -c"cmd /c del @path"

追加forfilesへのXPのexeから ftp://ftp.microsoft.com/ResKit/y2kfix/x86/

に追加してくださいC:\WINDOWS\system32

Windows2012R2は、次の仕事:

    forfiles /p "c:\FOLDERpath" /d -30 /c "cmd /c del @path"

のファイルを削除するこ

    forfiles /p "c:\FOLDERpath" /d -30 /c "cmd /c echo @path @fdate"

IMOでは、JavaScriptをタイムリーかつユニバーサルスクリプティング基準でご利用により製品その他のスクリプト言語(Windowsでは利用できるWindowsスクリプトホスト).ってい古いファイルのフォルダを、ここにはJavaScriptを行う機能です:

// run from an administrator command prompt (or from task scheduler with full rights):  wscript jscript.js
// debug with:   wscript /d /x jscript.js

var fs = WScript.CreateObject("Scripting.FileSystemObject");

clearFolder('C:\\temp\\cleanup');

function clearFolder(folderPath)
{
    // calculate date 3 days ago
    var dateNow = new Date();
    var dateTest = new Date();
    dateTest.setDate(dateNow.getDate() - 3);

    var folder = fs.GetFolder(folderPath);
    var files = folder.Files;

    for( var it = new Enumerator(files); !it.atEnd(); it.moveNext() )
    {
        var file = it.item();

        if( file.DateLastModified < dateTest)
        {
            var filename = file.name;
            var ext = filename.split('.').pop().toLowerCase();

            if (ext != 'exe' && ext != 'dll')
            {
                file.Delete(true);
            }
        }
    }

    var subfolders = new Enumerator(folder.SubFolders);
    for (; !subfolders.atEnd(); subfolders.moveNext())
    {
        clearFolder(subfolders.item().Path);
    }
}

各フォルダをクリアすぐに別の呼び出しclearFolder()機能です。この特定のコードも保存exeとdllのファイル、汚サブフォルダです。

この変更 7daysclean.cmd ってうるう年か。

に行うことができる以下の10の!

set /a Leap=0
if (Month GEQ 2 and ((Years%4 EQL 0 and Years%100 NEQ 0) or Years%400 EQL 0)) set /a Leap=day
set /a Months=!_months!+Leap

編集によるMofi:

上記の条件を与 J.R. 評価は常にへ false で無効な構文です。

Month GEQ 2 も間違いので追加86400秒より高いレベルでありが完了していることが必要に飛躍する年の月月月は月。

ワコードを飛躍日金-現在の年のみをバッチファイル 7daysclean.cmd 掲載 ジェイ することはできない。

set "LeapDaySecs=0"
if %Month% LEQ 2 goto CalcMonths
set /a "LeapRule=Years%%4"
if %LeapRule% NEQ 0 goto CalcMonths
rem The other 2 rules can be ignored up to year 2100.
set /A "LeapDaySecs=day"
:CalcMonths
set /a Months=!_months!+LeapDaySecs

が非常によく相対日付/時間に関する問題解決するバッチファイルです。がコマンドラインの通訳 cmd.exe 機能はありませんの日付/時刻算出します。たくさん良い作用追加コンソール用スクリプトに掲載されていて、他のページのスタックオーバーフローおよび他のウェブサイト

共通操作に基づく日付/時刻の要件に変換するには日付/時刻文字列からの秒数を決定します。非常に共通するのは1970-01-01 00:00:00UTCです。ものによってはそれ以降の日となることが期待されによって、日付の範囲のサポートに必要な特定の課題です。

ジェイ 掲載 7daysclean.cmd を含む高速"日秒"ソリューションのためのコマンドラインの通訳 cmd.exe.ものではありません閏年補正します。 J.R. 事が掲載され 追加 を飛躍日現在の年金が、無視し、その他のうるう年基準年度、すなわち1970年代以降

使っていて20年間の静的テーブル(配列)を作成度の小さなC関数のための早期の日数を含めうるう日から1970-01-01日付/時刻変換機能の私に対応C/C++.

この非常に高速のテーブル方法でも使用できるバーコードを使用 のための コマンドです。とやりがいを感じていましたコードのバッチ型 GetSeconds 計算するものの数秒で1970-01-01 00:00:00UTCのための日付/時刻文字列を渡す。

注意: うるう秒を考慮してWindowsのファイルシステムにも対応していないうるう秒です。

第一に、テーブル:

  1. 日以降1970-01-01 00:00:00UTCのために毎年飛躍す。

    1970 - 1979:     0   365   730  1096  1461  1826  2191  2557  2922  3287
    1980 - 1989:  3652  4018  4383  4748  5113  5479  5844  6209  6574  6940
    1990 - 1999:  7305  7670  8035  8401  8766  9131  9496  9862 10227 10592
    2000 - 2009: 10957 11323 11688 12053 12418 12784 13149 13514 13879 14245
    2010 - 2019: 14610 14975 15340 15706 16071 16436 16801 17167 17532 17897
    2020 - 2029: 18262 18628 18993 19358 19723 20089 20454 20819 21184 21550
    2030 - 2039: 21915 22280 22645 23011 23376 23741 24106 24472 24837 25202
    2040 - 2049: 25567 25933 26298 26663 27028 27394 27759 28124 28489 28855
    2050 - 2059: 29220 29585 29950 30316 30681 31046 31411 31777 32142 32507
    2060 - 2069: 32872 33238 33603 33968 34333 34699 35064 35429 35794 36160
    2070 - 2079: 36525 36890 37255 37621 37986 38351 38716 39082 39447 39812
    2080 - 2089: 40177 40543 40908 41273 41638 42004 42369 42734 43099 43465
    2090 - 2099: 43830 44195 44560 44926 45291 45656 46021 46387 46752 47117
    2100 - 2106: 47482 47847 48212 48577 48942 49308 49673
    

    を算出秒2039年に2106とエポック開始1970-01-01能を用いた符号なし32ビットの変動、すなわち符号なしlong(unsigned int)のC/C++.

    cmd.exe 利用のための数学的表現符号付き32ビット可変となります。そのための最大値は2147483647(0x7FFFFFFF)2038-01-19 03:14:07.

  2. うるう年の情報(No/Yes)の1970年2106.

    1970 - 1989: N N Y N N N Y N N N Y N N N Y N N N Y N
    1990 - 2009: N N Y N N N Y N N N Y N N N Y N N N Y N
    2010 - 2029: N N Y N N N Y N N N Y N N N Y N N N Y N
    2030 - 2049: N N Y N N N Y N N N Y N N N Y N N N Y N
    2050 - 2069: N N Y N N N Y N N N Y N N N Y N N N Y N
    2070 - 2089: N N Y N N N Y N N N Y N N N Y N N N Y N
    2090 - 2106: N N Y N N N Y N N N N N N N Y N N
                                     ^ year 2100
    
  3. 数日間初日の毎月現在。

                       Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
    Year with 365 days:  0  31  59  90 120 151 181 212 243 273 304 334
    Year with 366 days:  0  31  60  91 121 152 182 213 244 274 305 335
    

転換日までの秒数から1970-01-01はものを用います。

注意してください!

の形式の日時文字列に依存してWindowsの地域の言語を設定できます。の区切り文字とのトークンを割り当ての環境変数 Day, MonthYear 最初に のための ループの GetSeconds 必要に応じて現地の日付/時刻フォーマットが必要です。

が必要で対応、日付文字列の環境変数の場合は日付フォーマットに環境変数 であり、この日付フォーマットを使用するコマンド のための%%~tF.

たとえば %DATE% への展開を Sun 02/08/2015 ながら %%~tF への展開を 02/08/2015 07:38 PM 以下のコードは使用できる改変ライン4:

call :GetSeconds "%DATE:~4% %TIME%"

この結果通型で 02/08/2015 -日付文字列の3文字の平日の略称に分離スペース文字です。

また使用されるパスを現在日の正しいフォーマット:

call :GetSeconds "%DATE:~-10% %TIME%"

現在の最後の10文字から日付文字列が渡される機能 GetSeconds ていません場合は日付文字列の環境変数 はなしの平日と月日は常に2桁の数字がるごとにまとめて、つまりフォーマット dd/mm/yyyy または dd.mm.yyyy.

こちらはバッチコードを説明するコメントするだけで出力するファイルを削除するファイルを C:\Temp フォルダツリーを参照コードの最初の のための ループを実行します。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
rem Get seconds since 1970-01-01 for current date and time.
call :GetSeconds "%DATE% %TIME%"
rem Subtract seconds for 7 days from seconds value.
set /A "LastWeek=Seconds-7*86400"

rem For each file in each subdirectory of C:\Temp get last modification date
rem (without seconds -> append second 0) and determine the number of seconds
rem since 1970-01-01 for this date/time. The file can be deleted if seconds
rem value is lower than the value calculated above.

for /F "delims=" %%F in ('dir /A-D-H-S /B /S "C:\Temp"') do (
    call :GetSeconds "%%~tF:0"
    rem if !Seconds! LSS %LastWeek% del /F "%%~fF"
    if !Seconds! LEQ %LastWeek% (
        echo Delete "%%~fF"
    ) else (
        echo Keep   "%%~fF"
    )
)
endlocal
goto :EOF


rem No validation is made for best performance. So make sure that date
rem and hour in string is in a format supported by the code below like
rem MM/DD/YYYY hh:mm:ss or M/D/YYYY h:m:s for English US date/time.

:GetSeconds

rem If there is " AM" or " PM" in time string because of using 12 hour
rem time format, remove those 2 strings and in case of " PM" remember
rem that 12 hours must be added to the hour depending on hour value.

set "DateTime=%~1"
set "Add12Hours=0"
if "%DateTime: AM=%" NEQ "%DateTime%" (
    set "DateTime=%DateTime: AM=%"
) else if "%DateTime: PM=%" NEQ "%DateTime%" (
    set "DateTime=%DateTime: PM=%"
    set "Add12Hours=1"
)

rem Get year, month, day, hour, minute and second from first parameter.

for /F "tokens=1-6 delims=,-./: " %%A in ("%DateTime%") do (
    rem For English US date MM/DD/YYYY or M/D/YYYY
    set "Day=%%B" & set "Month=%%A" & set "Year=%%C"
    rem For German date DD.MM.YYYY or English UK date DD/MM/YYYY
    rem set "Day=%%A" & set "Month=%%B" & set "Year=%%C"
    set "Hour=%%D" & set "Minute=%%E" & set "Second=%%F"
)
rem echo Date/time is: %Year%-%Month%-%Day% %Hour%:%Minute%:%Second%

rem Remove leading zeros from the date/time values or calculation could be wrong.
if "%Month:~0,1%"  EQU "0" ( if "%Month:~1%"  NEQ "" set "Month=%Month:~1%"   )
if "%Day:~0,1%"    EQU "0" ( if "%Day:~1%"    NEQ "" set "Day=%Day:~1%"       )
if "%Hour:~0,1%"   EQU "0" ( if "%Hour:~1%"   NEQ "" set "Hour=%Hour:~1%"     )
if "%Minute:~0,1%" EQU "0" ( if "%Minute:~1%" NEQ "" set "Minute=%Minute:~1%" )
if "%Second:~0,1%" EQU "0" ( if "%Second:~1%" NEQ "" set "Second=%Second:~1%" )

rem Add 12 hours for time range 01:00:00 PM to 11:59:59 PM,
rem but keep the hour as is for 12:00:00 PM to 12:59:59 PM.
if "%Add12Hours%" == "1" (
    if %Hour% LSS 12 set /A Hour+=12
)
set "DateTime="
set "Add12Hours="

rem Must use 2 arrays as more than 31 tokens are not supported
rem by command line interpreter cmd.exe respectively command FOR.
set /A "Index1=Year-1979"
set /A "Index2=Index1-30"

if %Index1% LEQ 30 (
    rem Get number of days to year for the years 1980 to 2009.
    for /F "tokens=%Index1% delims= " %%Y in ("3652 4018 4383 4748 5113 5479 5844 6209 6574 6940 7305 7670 8035 8401 8766 9131 9496 9862 10227 10592 10957 11323 11688 12053 12418 12784 13149 13514 13879 14245") do set "Days=%%Y"
    for /F "tokens=%Index1% delims= " %%L in ("Y N N N Y N N N Y N N N Y N N N Y N N N Y N N N Y N N N Y N") do set "LeapYear=%%L"
) else (
    rem Get number of days to year for the years 2010 to 2038.
    for /F "tokens=%Index2% delims= " %%Y in ("14610 14975 15340 15706 16071 16436 16801 17167 17532 17897 18262 18628 18993 19358 19723 20089 20454 20819 21184 21550 21915 22280 22645 23011 23376 23741 24106 24472 24837") do set "Days=%%Y"
    for /F "tokens=%Index2% delims= " %%L in ("N N Y N N N Y N N N Y N N N Y N N N Y N N N Y N N N Y N N") do set "LeapYear=%%L"
)

rem Add the days to month in year.
if "%LeapYear%" == "N" (
    for /F "tokens=%Month% delims= " %%M in ("0 31 59 90 120 151 181 212 243 273 304 334") do set /A "Days+=%%M"
) else (
    for /F "tokens=%Month% delims= " %%M in ("0 31 60 91 121 152 182 213 244 274 305 335") do set /A "Days+=%%M"
)

rem Add the complete days in month of year.
set /A "Days+=Day-1"

rem Calculate the seconds which is easy now.
set /A "Seconds=Days*86400+Hour*3600+Minute*60+Second"

rem Exit this subroutine
goto :EOF

適切な性能を発揮しているすべてのコメントするすべての始まる行 レム 後0-4先ます。

の配列を使ってもでき、減少しの時間の範囲から1980-01-01 00:00:00 2038-01-19 03:14:07して現在のバッチコードは、上記の例に2015-01-01に2019-12-31として、以下のコードを使用する削除ファイル以前の7日間 C:\Temp フォルダツリーです。

さらに、バッチ以下のコードを最適化した24時間形式です。

@echo off
setlocal EnableDelayedExpansion
call :GetSeconds "%DATE:~-10% %TIME%"
set /A "LastWeek=Seconds-7*86400"

for /F "delims=" %%F in ('dir /A-D-H-S /B /S "C:\Temp"') do (
    call :GetSeconds "%%~tF:0"
    if !Seconds! LSS %LastWeek% del /F "%%~fF"
)
endlocal
goto :EOF

:GetSeconds
for /F "tokens=1-6 delims=,-./: " %%A in ("%~1") do (
    set "Day=%%B" & set "Month=%%A" & set "Year=%%C"
    set "Hour=%%D" & set "Minute=%%E" & set "Second=%%F"
)
if "%Month:~0,1%"  EQU "0" ( if "%Month:~1%"  NEQ "" set "Month=%Month:~1%"   )
if "%Day:~0,1%"    EQU "0" ( if "%Day:~1%"    NEQ "" set "Day=%Day:~1%"       )
if "%Hour:~0,1%"   EQU "0" ( if "%Hour:~1%"   NEQ "" set "Hour=%Hour:~1%"     )
if "%Minute:~0,1%" EQU "0" ( if "%Minute:~1%" NEQ "" set "Minute=%Minute:~1%" )
if "%Second:~0,1%" EQU "0" ( if "%Second:~1%" NEQ "" set "Second=%Second:~1%" )
set /A "Index=Year-2014"
for /F "tokens=%Index% delims= " %%Y in ("16436 16801 17167 17532 17897") do set "Days=%%Y"
for /F "tokens=%Index% delims= " %%L in ("N Y N N N") do set "LeapYear=%%L"
if "%LeapYear%" == "N" (
    for /F "tokens=%Month% delims= " %%M in ("0 31 59 90 120 151 181 212 243 273 304 334") do set /A "Days+=%%M"
) else (
    for /F "tokens=%Month% delims= " %%M in ("0 31 60 91 121 152 182 213 244 274 305 335") do set /A "Days+=%%M"
)
set /A "Days+=Day-1"
set /A "Seconds=Days*86400+Hour*3600+Minute*60+Second"
goto :EOF

もよりの情報を日付/時刻フォーマットやファイルの時間の比較からWindowsっと回答 だファイルは以上の4時間のバッチファイル 多くの追加に関する情報ファイルです。

あかつ謙虚な貢献をさらに貴重なねじになります。いる他のソリューションがなく、実際にエラーテキストが無視さ%ERRORLEVEL%る信号となる私の願います。私は正規にしたい%ERRORLEVEL%だけでしかできないのではないで"No files**(ファイルがありません"エラーになります。

例:

デバッグを具体的には、エラー:

forfiles /p "[file path...]\IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&ECHO found error||echo found success

用oneliner戻ERRORLEVEL成功または失敗:

forfiles /p "[file path...]\IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT /B 1||EXIT /B 0

用onelinerのERRORLEVELゼロ成功のためのコンテキスト内でbatchfileの中、その他のコード(ver>nulをリセットしERRORLEVEL):

forfiles /p "[file path...]\IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&ECHO found error||ver > nul

のためのSQL Server剤CmdExecジョブステップに降り立ったところです。わからない場合はバグがCmdExecのステップのみを認識し、最初の行のコード:

cmd /e:on /c "forfiles /p "C:\SQLADMIN\MAINTREPORTS\SQL2" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT 1||EXIT 0"&exit %errorlevel%

まXP資源キットを使用できrobocopyに移すべてのディレクトリを単一のディレクトリを使用し、rmdirを削除する。

mkdir c:\temp\OldDirectoriesGoHere
robocopy c:\logs\SoManyDirectoriesToDelete\ c:\temp\OldDirectoriesGoHere\ /move /minage:7
rmdir /s /q c:\temp\OldDirectoriesGoHere

と思い e.ジェームズの答え が良い年で改変バージョンのWindows早くWindows2000SP4それ以前)ですが、必要な書面を外部ファイルです。こちらは修理技術のデモンストレーションを作成していない外部のテキストファイルを維持しつつ、互換性:

REM del_old.cmd
REM usage: del_old MM-DD-YYYY
setlocal enabledelayedexpansion
for /f "tokens=*" %%a IN ('xcopy *.* /d:%1 /L /I null') do @if exist "%%~nxa" set "excludefiles=!excludefiles!;;%%~nxa;;"
for /f "tokens=*" %%a IN ('dir /b') do @(@echo "%excludefiles%"|FINDSTR /C:";;%%a;;">nul || if exist "%%~nxa" DEL /F /Q "%%a">nul 2>&1)

この質問は、こちらではスクリプトはすべて算引き算など余計な計算はお問い合わせいただいた場合の日数としてのパラメータ:

REM del_old_compute.cmd
REM usage: del_old_compute N
setlocal enabledelayedexpansion
set /a days=%1&set cur_y=%DATE:~10,4%&set cur_m=%DATE:~4,2%&set cur_d=%DATE:~7,2%
for /f "tokens=1 delims==" %%a in ('set cur_') do if "!%%a:~0,1!"=="0" set /a %%a=!%%a:~1,1!+0
set mo_2=28&set /a leapyear=cur_y*10/4
if %leapyear:~-1% equ 0 set mo_2=29
set mo_1=31&set mo_3=31&set mo_4=30&set mo_5=31
set mo_6=30&set mo_7=31&set mo_8=31&set mo_9=30
set mo_10=31&set mo_11=30&set mo_12=31
set /a past_y=(days/365)
set /a monthdays=days-((past_y*365)+((past_y/4)*1))&&set /a past_y=cur_y-past_y&set months=0
:setmonth
set /a minusmonth=(cur_m-1)-months
if %minusmonth% leq 0 set /a minusmonth+=12
set /a checkdays=(mo_%minusmonth%)
if %monthdays% geq %checkdays% set /a months+=1&set /a monthdays-=checkdays&goto :setmonth
set /a past_m=cur_m-months
set /a lastmonth=cur_m-1
if %lastmonth% leq 0 set /a lastmonth+=12
set /a lastmonth=mo_%lastmonth%
set /a past_d=cur_d-monthdays&set adddays=::
if %past_d% leq 0 (set /a past_m-=1&set adddays=)
if %past_m% leq 0 (set /a past_m+=12&set /a past_y-=1)
set mo_2=28&set /a leapyear=past_y*10/4
if %leapyear:~-1% equ 0 set mo_2=29
%adddays%set /a past_d+=mo_%past_m%
set d=%past_m%-%past_d%-%past_y%
for /f "tokens=*" %%a IN ('xcopy *.* /d:%d% /L /I null') do @if exist "%%~nxa" set "excludefiles=!excludefiles!;;%%~nxa;;"
for /f "tokens=*" %%a IN ('dir /b') do @(@echo "%excludefiles%"|FINDSTR /C:";;%%a;;">nul || if exist "%%~nxa" DEL /F /Q "%%a">nul 2>&1)

注意:上記のコードを考慮しうるう年では、どの正確な日数です。のできる最大日数の合計がされて0/0/0(ここで負を返します。

注意:の数が一つとなっているので、できません正しく取得し今後の日から入力しようともがく過去最終日の月)

ることができるかもしれませきこoffになります。できる見 この質問, となり、より簡単な例です。複雑さに付属していますが、開始時と比較します。できやすく教えてくれる日も大きいのではないが、多くの状況を考慮が必要な場合は、実際には。

その他に言うと思うのを生み出す場合を除き、本当に使用できませんの第三者ツールです。

これは何も驚きが必要ということで予定のタスクなど。

バッチファイルDelFilesOlderThanNDays.バット以下のサンプルexec w/params:

DelFilesOlderThanNDays.バット 7 C:\dir1\dir2\dir3\logs *.ログ

echo off
cls
Echo(
SET keepDD=%1
SET logPath=%2 :: example C:\dir1\dir2\dir3\logs
SET logFileExt=%3
SET check=0
IF [%3] EQU [] SET logFileExt=*.log & echo: file extention not specified (default set to "*.log")
IF [%2] EQU [] echo: file directory no specified (a required parameter), exiting! & EXIT /B 
IF [%1] EQU [] echo: number of days not specified? :)
echo(
echo: in path [ %logPath% ]
echo: finding all files like [ %logFileExt% ]
echo: older than [ %keepDD% ] days
echo(
::
::
:: LOG
echo:  >> c:\trimLogFiles\logBat\log.txt
echo: executed on %DATE% %TIME% >> c:\trimLogFiles\logBat\log.txt
echo: ---------------------------------------------------------- >> c:\trimLogFiles\logBat\log.txt
echo: in path [ %logPath% ] >> c:\trimLogFiles\logBat\log.txt
echo: finding all files like [ %logFileExt% ] >> c:\trimLogFiles\logBat\log.txt
echo: older than [ %keepDD% ] days >> c:\trimLogFiles\logBat\log.txt
echo: ---------------------------------------------------------- >> c:\trimLogFiles\logBat\log.txt
::
FORFILES /p %logPath% /s /m %logFileExt% /d -%keepDD% /c "cmd /c echo @path" >> c:\trimLogFiles\logBat\log.txt 2<&1
IF %ERRORLEVEL% EQU 0 (
 FORFILES /p %logPath% /s /m %logFileExt% /d -%keepDD% /c "cmd /c echo @path"
)
::
::
:: LOG
IF %ERRORLEVEL% EQU 0 (
 echo:  >> c:\trimLogFiles\logBat\log.txt
 echo: deleting files ... >> c:\trimLogFiles\logBat\log.txt
 echo:  >> c:\trimLogFiles\logBat\log.txt
 SET check=1
)
::
::
IF %check% EQU 1 (
 FORFILES /p %logPath% /s /m %logFileExt% /d -%keepDD% /c "cmd /c del @path"
)
::
:: RETURN & LOG
::
IF %ERRORLEVEL% EQU 0 echo: deletion successfull! & echo: deletion successfull! >> c:\trimLogFiles\logBat\log.txt
echo: ---------------------------------------------------------- >> c:\trimLogFiles\logBat\log.txt

拡大アクアの答えいただけ多くの人に聞きUNCパス。単純にマッピングのuncパスをドライブレターまforfilesます。マッピングやunmappingのドライブができるプログラムによるバッチファイルです。

net use Z: /delete
net use Z: \\unc\path\to\my\folder
forfiles /p Z: /s /m *.gz /D -7 /C "cmd /c del @path"

このファイルを全部削除してくださいます。gz拡張機能は以前の7日間です。にしたい場合は、必ずZ:なにマッピングも使用できないとして

net use Z: \\unc\path\to\my\folder
if %errorlevel% equ 0 (
    forfiles /p Z: /s /m *.gz /D -7 /C "cmd /c del @path"
) else (
    echo "Z: is already in use, please use another drive letter!"
)

ユ多くの答えています。シンプルで便利なルートも良かった実ROBOCOPY.EXE 二度順に、シングルからWindowsのコマンドライン命令を使用 & パラメータとします。

ROBOCOPY.EXE SOURCE-DIR TARGET-DIR *.* /MOV /MINAGE:30 & ROBOCOPY.EXE SOURCE-DIR TARGET-DIR *.* /MOV /MINAGE:30 /PURGE

この例で摘み、すべてのファイル(.)以上経過した30日に移動して、対象フォルダにまとめた。次のコマンドは同じものは パージ コマンドを削除ファイルの対象フォルダが存在しないのソースフォルダにまとめた。なので、基本的には、最初のコマンドに移動しファイルの削除できなくなり、ソースフォルダのコマンドが呼び出されます。

相談ROBOCOPYのドキュメントおよび使用/Lスイッチの場合使用中検査について

ROBOCOPY 本作だった。案私Iman.ものではなく移動してファイル/フォルダを一時ディレクトリを削除する内容を一時フォルダ のファイルをゴミ箱!!!

これは数行のバックアップバッチファイルの例:

SET FilesToClean1=C:\Users\pauls12\Temp
SET FilesToClean2=C:\Users\pauls12\Desktop\1616 - Champlain\Engineering\CAD\Backups

SET RecycleBin=C:\$Recycle.Bin\S-1-5-21-1480896384-1411656790-2242726676-748474

robocopy "%FilesToClean1%" "%RecycleBin%" /mov /MINLAD:15 /XA:SH /NC /NDL /NJH /NS /NP /NJS
robocopy "%FilesToClean2%" "%RecycleBin%" /mov /MINLAD:30 /XA:SH /NC /NDL /NJH /NS /NP /NJS

掃除を何以上15日の私の"Tempフォルダは、30日をもっAutoCADのバックアップフォルダにまとめた。使う変数で、ラインきもとでの再利用のための場所で行われます。あなただけるのに必要dosへのパスをゴミ箱に移動させなお、ログインします。

でも確認することができ、作業コンピュータのためだけます。私は理解していますが、一方で、より制限的な権利でぜひ試してみてくださいね;)Google検索のための説明等を行なっていますROBOCOPYパラメータ。

感謝!

この一かったです。また日付できsubstractのた金額を年間に戻り時間:

@echo off

set m=%date:~-7,2%
set /A m
set dateYear=%date:~-4,4%
set /A dateYear -= 2
set DATE_DIR=%date:~-10,2%.%m%.%dateYear% 

forfiles /p "C:\your\path\here\" /s /m *.* /d -%DATE_DIR% /c "cmd /c del @path /F"

pause

/Fcmd /c del @path /F 軍の特定のファイルを削除するものの場合、ファイルで読み取り専用になります。

dateYear の変数が変更できますのsubstractご自身のニーズ

私のスクリプトファイルを削除する以上、特定の年

@REM _______ GENERATE A CMD TO DELETE FILES OLDER THAN A GIVEN YEAR
@REM _______ (given in _olderthanyear variable)
@REM _______ (you must LOCALIZE the script depending on the dir cmd console output)
@REM _______ (we assume here the following line's format "11/06/2017  15:04            58 389 SpeechToText.zip")

@set _targetdir=c:\temp
@set _olderthanyear=2017

@set _outfile1="%temp%\deleteoldfiles.1.tmp.txt"
@set _outfile2="%temp%\deleteoldfiles.2.tmp.txt"

  @if not exist "%_targetdir%" (call :process_error 1 DIR_NOT_FOUND "%_targetdir%") & (goto :end)

:main
  @dir /a-d-h-s /s /b %_targetdir%\*>%_outfile1%
  @for /F "tokens=*" %%F in ('type %_outfile1%') do @call :process_file_path "%%F" %_outfile2%
  @goto :end

:end
  @rem ___ cleanup and exit
  @if exist %_outfile1% del %_outfile1%
  @if exist %_outfile2% del %_outfile2%
  @goto :eof

:process_file_path %1 %2
  @rem ___ get date info of the %1 file path
  @dir %1 | find "/" | find ":" > %2
  @for /F "tokens=*" %%L in ('type %2') do @call :process_line "%%L" %1
  @goto :eof

:process_line %1 %2
  @rem ___ generate a del command for each file older than %_olderthanyear%
  @set _var=%1
  @rem  LOCALIZE HERE (char-offset,string-length)
  @set _fileyear=%_var:~0,4%
  @set _fileyear=%_var:~7,4%
  @set _filepath=%2
  @if %_fileyear% LSS %_olderthanyear% echo @REM %_fileyear%
  @if %_fileyear% LSS %_olderthanyear% echo @del %_filepath%
  @goto :eof

:process_error %1 %2
  @echo RC=%1 MSG=%2 %3
  @goto :eof
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top