2017-07-21 9 views
0

バッチファイルを作成して特定のファイル形式(tar)に一致するファイルを特定のディレクトリおよびそのサブディレクトリ(60日以上)で削除することができます。一致するファイルの数を最小限に抑えてください(ファイルが1つしかなく、60日以上経過しても保存したい場合は残りのファイルを削除してください)。下の例は、ルートディレクトリz:\ zzzで動作しますが、サブディレクトリ内の一致するファイルは検索/削除しません。私は開発者ではないので、この例は私にはわかりません。現時点ではバッチファイルを作成して一致するファイルタイプを削除する

@echo off 
    pushd z:\zzz\ 
    for %%X in (tar) do (
     set "skip=1" 
     for /f "skip=2 delims=" %%F in ('dir /b /a-d /o-d /tw *.%%X') do (
     if defined skip forfiles /d -60 /s /m "%%F" >nul 2>nul && set "skip=" 
     if not defined skip del "%%F" 
     ) 
    ) 

答えて

0

は、あなたのdirコマンドは次のようになります。

dir /b /a-d /o-d /tw *.%%X 

あなたは/sコマンドを追加する必要があり、サブディレクトリを検索すると、安全のために、私は変化するであろう、それを取得するには*.%%Xcd%\*.%%X

コードをもう一度見て、コードの他の2つの部分を見る必要があると思います。

  1. for /f "skip=2 delims=" %%F inは、/ f "skip = 1 delims =" %% Fの場合、 にする必要があります。古いバックアップを1つだけ保持したいからです。

  2. if defined skip forfiles /d -60 /m "%%F" >nul 2>nul && set "skip="

    は次のようになります。

    if defined skip forfiles /d -60 /s /m "*.%%X">nul 2>nul && set "skip=" 
    

    だから、%%Fが同様にパスが含まれます/sdirコマンドに追加されているように、現在のファイル拡張子(でサブディレクトリと検索を含みファイル名としてforfilesコマンドが結果を返さないようにしていました。)

だから、代わりにすべての変更と、それは次のようになります。私は私のラップトップ上でこれをテストしてみたし、今でOK動作しているよう

@echo off 
pushd "c:\backup" 
    for %%X in (tar) do (
     set skip="1" 
     for /f "skip=1 delims=" %%F in ('dir /b /s /a-d /o-d /tw %cd%\*.%%X') do (
      if defined skip forfiles /s /d -60 /m "*.%%X">nul 2>nul && set "skip=" 
      if not defined skip del %%F 
     ) 
    ) 

を。あなたがそれを試すことができ、あなたがどのように乗っているか教えてください。

+0

私は2番目のオプションを試しましたが、どちらも機能しませんでした。私は、 "/ s"というサブディレクトリスイッチがそれをまったく動作させているように見えることに気付きました。 2つの古いtarファイルをルートディレクトリにコピーしてバッチファイルを実行したが、何もしなかった。私はスイッチを削除し、2つの古いファイルを削除することができました。私は "dir"コマンドの直後にスイッチを置こうとしましたが、どちらもうまく動作しませんでした – rlivermore

+0

@rlivermore - 遅れて申し訳ありませんが、私はテストのために私のラップトップを持っていましたそれ。うまくいけば、それは今あなたのためにうまくいくでしょう。 :) –

+0

私はあなたの執拗さに感謝してくれます!私は何かを逃している、私は修正されたコードが表示されませんか? – rlivermore

関連する問題