删除子目录中除给定扩展名之外的所有文件(在 Windows BATCH 中)

Delete all files in subdirectories EXCEPT a given extension (in Windows BATCH)

这让我很难受 寻找一个快速的,可能是循环的,代码片段(尽可能小),它将删除指定目录和所有子目录中任何类型的所有文件(不是文件夹)不是 .apk(在这种情况下)

这是我着陆的结果,但它什么也没做。 (顺便说一句,我已经将 %current% 设置为我脚本中其他地方的特定文件夹)

For /R %%f in (%current%\Data\TEMP\*) do (
  if not %%~xf==.apk del /S "%%f"
)

此命令在控制台中有效,完全符合我的要求。我只需要在我想开始清理的目录的根目录中右键单击打开一个新命令 window。但是无论出于何种原因,我都无法在批处理脚本中使用它。

For /r %f in (*) do if not %~xf==.apk del /S "%f"

有人知道为什么第一个 for 循环让我失望吗?

for /R 当您在集合中指定的不仅仅是文件名模式(即括号之间的部分)时,可能会导致意外结果。所以你需要把路径部分紧跟在/R后面。 (如果没有指定,它默认为当前目录。)所以下面应该工作:

for /R "%current%\Data\TEMP" %%f in (*) do (if not "%%~xf"==".apk" del "%%~f")