我已阅读answer to "Batch File to Delete Files in a Folder" proposed by @Magoo并尝试了代码,但无法发表评论或提出其他问题,所以如果我在这里违反规则,我会道歉。
让我先说一下我可能误解了这应该如何运作。
首先,我确保要清理的目录中的所有文件都具有相同的日期。 然后我用所述目录的名称替换了c:\ sourcedir并运行了cmd文件。
我希望它产生一个空字符串,但得到了完整的文件列表。
尽管我可能遗漏了一些东西,但这可能会非常不幸。
我不太擅长DOS / CMD,所以我想知道@Magoo是否可能澄清这个问题。
答案 0 :(得分:1)
不确定这是你需要的,但可以用作骨架来启动
@echo off
setlocal enableextensions disabledelayedexpansion
pushd "c:\where\the\filesAre" && (
for /f "skip=1 delims=" %%a in ('dir /b /a-d /tw /o-d *') do echo del "%%a"
popd
)
首先,将活动目录更改为已添加的文件夹(根据需要更改)。然后使用for
命令执行dir
命令并处理其输出。对于dir
输出中的每一行,执行do
子句后的代码,该行的内容存储在for
可替换参数%%a
dir
命令将以裸格式列出文件(/b
仅文件名),不包括目录(/a-d
),按下一个写入日期顺序降序/tw /o-d
)。因此,最新文件是for
命令将处理的列表中的第一个文件(dir命令的输出)。
由于我们要求for
跳过一行(skip=1
),因此将忽略此第一个文件。对于其余的行/文件,执行del命令。
del
操作仅响应控制台。如果输出正确,请删除echo
命令以删除文件。
已修改以适应评论
@echo off
setlocal enableextensions disabledelayedexpansion
rem Configure extensions to process
set "_ext.00=al*.txt"
set "_ext.01=cm*.txt"
rem Change to the desired folder
pushd "c:\where\the\filesAre" || goto :eof
rem For each pattern in the list
rem For each file matching the pattern (except the newest)
rem Delete the file
for /f "tokens=1,* delims==" %%x in ('
set _ext.
') do for /f "skip=1 delims=" %%a in ('
dir /b /a-d /tw /o-d "%%~y" 2^>nul
') do echo del "%%a"
popd
定义一个"数组"使用要处理的文件模式列表。对于每个模式(在outter set
内使用for /f
命令检索)迭代匹配该模式的文件(内部for
),跳过第一个/最新模式并删除其余模式