我希望有人可以帮我创建一个批处理文件来删除与指定目录中特定文件格式(tar)匹配的文件及其60天以上的子目录但仍保留最少数量的匹配文件(可能只有1个文件,如果超过60天我们要保留它,请删除其余文件。我发现下面的示例适用于根目录z:\ zzz但它不搜索/删除其子目录中的匹配文件。我不是开发人员所以这个例子对我来说很神秘。
@echo off
pushd z:\zzz\
for %%X in (tar) do (
set "skip=1"
for /f "skip=2 delims=" %%F in ('dir /b /a-d /o-d /tw *.%%X') do (
if defined skip forfiles /d -60 /s /m "%%F" >nul 2>nul && set "skip="
if not defined skip del "%%F"
)
)
答案 0 :(得分:0)
目前您的dir命令如下所示:
dir /b /a-d /o-d /tw *.%%X
要让它搜索子目录,您需要添加/s
命令,为了安全起见,我会将*.%%X
更改为cd%\*.%%X
再次查看代码之后,我认为我可以看到需要更改的代码的其他两个部分:
for /f "skip=2 delims=" %%F in
需要:
for / f“skip = 1 delims =”%% F in,因为你只想保留一个旧备份。
if defined skip forfiles /d -60 /m "%%F" >nul 2>nul && set "skip="
应该是:
if defined skip forfiles /d -60 /s /m "*.%%X">nul 2>nul && set "skip="
因此它包括子目录和当前文件扩展名的搜索(因为/s
命令添加到dir
使%%F
包含路径和文件名,这导致forfiles
命令不返回任何结果。)
所以所有的变化都应该是这样的:
@echo off
pushd "c:\backup"
for %%X in (tar) do (
set skip="1"
for /f "skip=1 delims=" %%F in ('dir /b /s /a-d /o-d /tw %cd%\*.%%X') do (
if defined skip forfiles /s /d -60 /m "*.%%X">nul 2>nul && set "skip="
if not defined skip del %%F
)
)
我在笔记本电脑上测试了这个,现在似乎工作正常。如果你可以尝试一下,让我知道你是怎么过的。