1

私はバッチ ファイルの初心者ですが、30 日以上経過した .txt ログ ファイルを削除するスクリプトを探しています... (FWIW、私は XP SP3 を使用しています...)

私はここにある例に従おうとしました(ここforfiles.exeからのダウンロードを含む)、そしてこれで終わりました:

forfiles -p"D:\SQL Database Back Ups\Update_FmlaManagement_Log" -s -m *.txt -d-30 -c "cmd /c del @FILE"

しかし、私はこのエラーが発生します:

Error path not found (3rd argument) line 545

私は多くのグーグルを行いましたが、このエラーが何について話しているのか理解できないようです. 誰かforfiles.exeが を機能させるために使用することを提案しまし@variablesたが、私はそれを (完全な forfiles パスと共に) 試しましたが、何も機能していないようです...

このエラーメッセージが私に何を伝えているかについて、誰かが少なくとも私を正しい方向に向けることができますか?

4

4 に答える 4

1

まあ、私は前向きではありませんが、問題はMicrosoftのFTPサーバーからは悪いものだったようです。私はこの男のサイト直接ダウンロード)から1秒(Windows Server 2003の場合)をダウンロードすることになりました。 forfiles.exeforfiles.exe

元のexeを置き換え、C:\WINDOWS\system32ダウンロードフォルダー内のコピーを削除した後、次のように構文をダッシュ​​からスラッシュに少し変更しました。

forfiles /p "D:\SQL Database Back Ups\Update_FmlaManagement_Log" /s /m *.txt /d -30 /c "cmd /c del @FILE"

これは最初の試行で完全に機能しました!

答えは、forfile.exeMicrosoftのFTPサーバーからダウンロードしないでください。:P

編集:

上記のリンクで他の人がMicrosoftの.exeを正常に使用したかどうかを知りたいのですが。そうでなければ、多分それは私の特定の設定での何かです...

于 2013-02-07T21:39:46.390 に答える
1

@file はファイル名のみです。パスは含まれません。バッチ ファイルがパス内で実行されていない場合、別の作業ディレクトリにいるため、削除するファイルが表示されません。

于 2013-02-07T20:27:46.040 に答える
1

エラーがサンプル行から発生したとは信じられません。
私の forfiles (Win7) は、-pとパスの間にスペースがないためエラーをスローします。

また、エラー メッセージのテキストは、バッチ コマンドでは正常ではありません。
エラーが発生した行や、どのパラメーターが間違っているかを教えてくれるバッチコマンドを知りません。

したがって、まったく別のソースからエラー メッセージを受け取ったと思います。
または、forfilesまったく別のことを行う 2 番目のコマンドがあります。
または、テストの 1 つに名前を付けていますforfiles.batか?

于 2013-02-07T21:11:31.107 に答える
1

できるかどうかを確認するために、.xml を使用せずに 30 日以上経過したファイルを削除するために、小さな合計をまとめてみましたforfilespushd行が適切なディレクトリに移動するように設定されていることを確認してください。25920002013 年 1 月 31 日から 2013 年 1 月 1日を引いて を取得しました。

@echo off
setlocal enabledelayedexpansion

pushd "D:\SQL Database Back Ups\Update_FmlaManagement_Log"

set today=%date:~-10%
call :toEpoch %today%
set /a thirtyDaysAgo=%epoch% - 2592000

for /f "tokens=1,5*" %%I in ('dir /o:d *.txt ^| findstr "txt$"') do (
    call :toEpoch %%I
    if "%%K"=="" (set file=%%J) else (set file=%%J %%K)
    if /i %thirtyDaysAgo% GTR !epoch! del /q "!file!"
)
popd
goto :EOF

:toEpoch date
echo wscript.echo datediff("s", "01/01/1970 00:00:00", "%1")>epoch.vbs
for /f %%x in ('cscript /nologo epoch.vbs') do set epoch=%%x
del /q epoch.vbs
goto :EOF

(VBscript はCameron Oakenleafから借りました。)

確かに、これは執拗に正確には機能しません。たとえば、ログ ファイルが 30 日前の正午に最後に変更され、これを午前 8:00 に実行している場合、30 日前に到達するまであと 4 時間あるにもかかわらず、ファイルはおそらく削除されます。また、おそらく forfiles.exe ほど効率的ではありません。

*shrug* それはあまり旅されていない道であり、私はそれを旅しました。

編集: HerbCSO には、別の、おそらくより優れた実装があり、私のものを Rube Goldberg-ian ソリューションのように見せます。

于 2013-02-07T19:47:45.703 に答える