2

月に一度、タスク スケジュールを使用して *.bak を検索し、Windows でバッチ ファイルを作成しようとしました。30年以上前の状態。フルパス名と8dot3以外のパス名の2条件で作成します。削除できない方はTXTファイルに記録してください。

ここで私が見つけたコマンド:

forfiles /P E:\WP /S /M *.bak /D -30 /C "cmd /C del @path"

8dot3 以外のファイル名を使用して削除するコマンドは次のとおりです。

forfiles /P E:\WP /S /M *.bak /D -30 /C "cmd /C for %A in (@path) do @echo del %~sA

パスとファイル名が長いため削除できないファイルについては、8dot3 以外の長いフルパス ファイル名の TXT ファイルに記録しました。

forfiles /P E:\WP /S /M *.bak /D -30 /C "cmd /c echo @path >> list.txt"
forfiles /P E:\WP /S /M *.bak /D -30 /C "cmd /c for %A in (@path) do @echo %~sA" >> list.txt

これらの 4 つのコマンドは、dos コマンド プロンプトにコピー アンド ペーストするだけでうまく機能します。

しかし、それらを「del30days.bat」などのバッチ ファイルに入れると、8dot3 以外のファイル名では機能しません。

@echo off
:: Set host computer name
set host=%COMPUTERNAME%

:: Set save list path
set list_path=F:\LogFiles

:: Set min age of files and folders to delete
set file_list=ListCantDeleted-%host%-%date:~10,4%-%date:~7,2%-%date:~4,2%.txt

:: Set target folder path
set target_path=E:\WP

:: Set min age of files and folders to delete
set max_days=30

:: Set what kind files or extension
set file_ext=*.bak

:: Delete files from target path
forfiles /P %target_path% /S /M %file_ext% /D -%max_days% /C "cmd /C del @path"
forfiles /P %target_path% /S /M %file_ext% /D -%max_days% /C "cmd /C for %A in (@path) do @echo del %~sA"


:: Record files from target path
forfiles /P %target_path% /S /M %file_ext% /D -%max_days% /C "cmd /c echo @path >> %list_path%\%file_list%"
forfiles /P %target_path% /S /M %file_ext% /D -%max_days% /C "cmd /C for %A in (@path) do @echo %~sA >> %list_path%\%file_list%"

8dot3 以外のファイル名でこのエラーが発生しましたが、TXT ファイルに記録された長いファイル名では発生しませんでした。つまり、8dot3 以外のファイル名を使用してファイルを削除することはできません。

~sA" was unexpected at this time.

何か理由は?

これを作成する目標は、*.bak ファイルを 30 日以上削除することです。長いパスとファイル名に問題はありません。誰でも簡単に解決できますか?

4

1 に答える 1

0

あなたは自分自身を平手打ちするつもりです。問題は、バッチ ファイルでは for ループ変数が 2 倍のパーセントを必要とすることです。%%A と %%~sA。

于 2013-03-19T10:40:27.387 に答える