对于长路径和长文件名,删除超过30天的文件

时间:2013-03-19 08:08:23

标签: windows command-line batch-file scheduled-tasks

我试图通过每月一次使用任务计划在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.

有什么理由?

我创建的目标是删除30天以上的* .bak文件,长路径和文件名没有任何问题。有人为此得到了简化解决方案吗?

1 个答案:

答案 0 :(得分:0)

你要打自己。问题是在批处理文件中,for循环变量需要双倍百分比。 %% A和%% ~sA。