我试图通过使用任务计划每月一次在 Windows 中制作批处理文件来查找 *.bak。条件超过 30 岁。我创建了两个条件完整路径名和非 8dot3 路径名。对于那些无法删除的人,将其记录到 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
如果我只是复制并粘贴到 dos 命令提示符中,这 4 个命令运行良好。
但是当我将它们放入批处理文件中时,例如“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 天,而长路径和文件名没有任何问题。有人对此有简化的解决方案吗?