删除包含空格BATCH

时间:2018-04-12 18:00:36

标签: batch-file

我正在寻找一种方法来删除目录中早于x天并且没有特定扩展名的所有文件,我找到了第一个命令行:

forfiles -p "C:\Test" -s -m *.* /D -5 /C "cmd /c del @path"

这是第二次:

for /f %%F in ('dir /b /a-d ^| findstr /vile ".bat"') do del "%%F"

但无法在一个命令行中执行它们,而第二个它忽略了名称中包含空格的文件。

请注意,我在批处理文件(DeleteOldFiles.bat)中执行此操作。 提前感谢大家。

2 个答案:

答案 0 :(得分:1)

FORFILES命令可以选择查看文件扩展名是什么。因此,您所要做的就是使用该变量将其与您要排除的扩展名进行比较。

forfiles -p "C:\Test" -s -m *.* /D -5 /C "cmd /c if /I not @ext==0x22bat0x22 del @path"

0x22是双引号的十六进制表示。 Forfiles变量总是被引用。

答案 1 :(得分:0)

当使用带有/f的for循环时,某些特殊字符是默认的分隔符。其中一个是空间,所以带空格的名称将按空格分割。因此,我们需要广告"delims="来覆盖默认的delims。

但我怀疑你想要同时删除旧文件并排除某些bat扩展名,因为批处理文件可能在sam目录中作为要删除的文件。您可以通过将文件放在其他位置并指定文件需要删除的目录的路径来解决此问题。如果是这样,那么只需将其添加到批处理文件并将文件放在单独的目录中:

    forfiles -p "C:\Test" -s -m *.* /D -5 /C "cmd /c del @path"

如果你想删除包含批处理文件的dir中的所有其他文件,并在另一个文件中单独删除N日期以前的文件,那么这些文件就可以了。

批处理文件版本:

@echo off
forfiles -p "C:\Test" -s -m *.* /D -5 /C "cmd /c del @path"
for /f  "delims=" %%F in ('dir /b /a-d ^| findstr /vile ".bat"') do echo del "%%F"
pause

Cmdline版本:

forfiles -p "C:\Test" -s -m *.* /D -5 /C "cmd /c del @path" & for /f  "delims=" %%F in ('dir /b /a-d ^| findstr /vile ".bat"') do echo del "%%F"

请注意放置批处理文件的位置,因为for循环的命令中没有特定路径。出于这个原因,我确定echo delecho之前确定您的查询echo是您期望的结果,您可以删除i = 1; while i < size(data,1) if (i + 5) <= size(data,1) if any(envNoClutterscansV(i:i + 5, 1:500) > 75) % do something end end i = i + 5; end 来执行实际任务。