Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 删除所有文件,包括带有空格的文件_Batch File - Fatal编程技术网

Batch file 删除所有文件,包括带有空格的文件

Batch file 删除所有文件,包括带有空格的文件,batch-file,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.b

我正在寻找一种方法来删除目录中早于
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
)中执行此操作的。
提前感谢大家。

当使用带有
/f
的for循环时,某些特殊字符是默认的delimeters。其中一个是空格,因此带有空格的名称将被空格分割。因此,我们需要ad
“delims=“
来覆盖默认delims

但是,我怀疑您希望同时删除旧文件和排除某些bat扩展名,这纯粹是因为批处理文件可能与要删除的文件一样位于sam目录中。您只需将文件放在其他位置并指定需要删除文件的目录的路径,就可以克服这一问题。如果是这样,只需将其添加到批处理文件中,并将该文件放置在单独的目录中:

    forfiles -p "C:\Test" -s -m *.* /D -5 /C "cmd /c del @path"
如果您想从包含批处理文件的目录中删除所有其他文件,并在另一个目录中分别删除早于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
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"
Cmdline版本:

@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
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
放在
del
之前,一旦您确定查询
echo
是您期望的结果,您就可以删除
echo
以执行实际任务

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

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

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

批处理文件或来自cmdline?这正是我想要的,我只是添加了相对目录来删除批处理文件目录中的文件,而不删除批处理文件本身,因此非常感谢。”forfiles-p%~dp0-s-m/D-60/C“cmd/C if/I not@ext==0x22bat0x22 del@path”'我正在处理的目录是一个临时的大多数word和excel文件的目录,这些文件是根据上一个目录中的模型文件创建的,我在打印完这些文件后保留这些文件,直到我确定没有错误,并且它们已由主管签名并发送到目标。正如您所怀疑的,出于某些原因,我想将批处理文件放在与文件相同的目录中,我更愿意这样做,因为@Squashman的答案正是我想要的,尽管您的答案对我很有帮助。谢谢你们两位。