2009-07-27 10 views
1

私はディレクトリから古いファイルを削除する小さなバッチスクリプトを作成しようとしています。 最初のパラメータは、スクリプトを検索するディレクトリで、2番目のパラメータは保存するファイルの数です。バッチスクリプト、ディレクトリの結果を使用する

rem @ECHO OFF 

rem %1 is the path in which to look for the files 
rem %2 is the number of recent files to preserve 

if [%1] EQU [] (
    echo ERROR: Missing Required Paramater directory path. 
    goto :eof 
) 

if [%2] EQU [] (
    echo ERROR: Missing Required Paramater, number of files to preserve 
    goto :eof 
) 

if %2 LSS 0 (
    echo ERROR: Number of files to preserve provided was negative 
    goto :eof 
) 

set FolderPath=%1 
set SafeNumber=%2 

cd %FolderPath% 

for /f %%f in ('dir /O-D /A-D /B') do call :delete %%f 
goto :eof 

:delete 
if %SafeNumber% LEQ 0 (
    del %1 
) else (
    set /a SafeNumber-=1 
) 
goto :eof 

:eof 

私がここに持っているものは、ファイル名のリストを最新から古いものに並べて出力するディレクトリです。 SafeNumberの種類に応じて、最初のいくつかのファイルをスキップしてから削除します。SafeNumber < = 0

ファイル名が "Test File.txt"の場合は問題があります。 "Test"は "Test File.txt"ではなく、%1として削除に渡されます。

私のスクリプトをうまく動かす方法や、誰かがより良い解答を得られる方法はありますか?

答えて

2

入力のファイル名の前後に引用符を入れてみましたか?スクリプトの%fまたは%1を意味します。

+0

は、文のように変更: ( 'DIR/OD/AD/Bで/ F "delims =" %% fについて%FolderPath% ')do call:delete "%% f" これで完全なファイル名が取得されます。引用は束を助け、その感謝を考えなかった。 –

0

ファイル名などの空白を処理する。あなたはファイル名とパス "%1"などを引用したいと思うでしょう。おそらくそれがあなたの唯一の問題です。

0

-newerと-exec rmを指定してfindコマンドを実行する必要があります。すべてがfile.txtをより新しいファイルを削除するには、たとえばん:長い時間前、私は、すなわち、バッチファイルから、コンソールから起動されるようになっている単純なJava PROGを書いた

find . -type f -newer file.txt -exec rm {} \; 
+1

彼はUnixシェルではなくDOS/Winバッチファイルについて質問しています! –

+0

cygwinに試してみてください – ennuikiller

+0

unix findコマンドがWindowsに移植されました。上記のために、それは - >見つけるc:\パス型f - 新しいfile.txt -delete – ghostdog74

0

。 progは、指定されたディレクトリから古いファイルを削除します。 hereを確認してください。実際にどのくらい正確に動作しているのか覚えていませんが、まずテストフォルダで使用することをお勧めします。それは少なくとも私がそれを使用したところで、Windowsのために使用されるはずです。

私は今、私はその仕事をしているため、各ブート時に起動し、次のAutomatorスクリプトを使用しているマックに切り替え:

find /Users/<yourUser>/Downloads/* -type f -mtime +90 -exec mv -f {} /Users/<yourUser>/.Trash \; 
0
がループのためにあなたを変更し、あなたの削除機能を廃止

。私は、forループの不健康な愛を持って

for /f "skip=%safenum%" %%f in ('dir /o-d /a-d /b') do (del %%f) 

は...

関連する問題