私はディレクトリから古いファイルを削除する小さなバッチスクリプトを作成しようとしています。 最初のパラメータは、スクリプトを検索するディレクトリで、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として削除に渡されます。
私のスクリプトをうまく動かす方法や、誰かがより良い解答を得られる方法はありますか?
は、文のように変更: ( 'DIR/OD/AD/Bで/ F "delims =" %% fについて%FolderPath% ')do call:delete "%% f" これで完全なファイル名が取得されます。引用は束を助け、その感謝を考えなかった。 –