2017-09-25 67 views
0

我需要使用批处理脚本删除特定文件夹中的文件,但是,我需要保留生成的最后一个文件。我们的服务器有一个保持生成日志的IIS文件夹,我们需要始终保持最后一个,但删除旧的。删除文件夹中的文件但保留上次生成的文件

目前,我们有这样的脚本,删除一个特定文件夹中的所有文件(在这种情况下,所有的内部C中的文件:\ TEMP):我们如何可以编辑代码保留最近

del /q "C:\Temp\*" 
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q 

文件夹中生成的文件?

非常感谢您的帮助。

+0

寻找最新的文件并删除所有不是那个文件的文件? –

+0

你需要自己搜索,研究,编写和尝试代码。发布一个甚至没有尝试执行您需要的任务并要求添加的文件是一个直接的代码请求,这里的主题不在话下。 – Compo

+0

你说你想删除文件,所以使用'rmdir'没有意义,因为它删除目录... – aschipfl

回答

0

此批处理文件提供了一个解决方案:

@echo off 
set "SourceFolder=C:\Temp" 
for /F "skip=1 delims=" %%I in ('dir "%SourceFolder%\*" /A-D /B /O-D 2^>nul') do del "%SourceFolder%\%%I" 
set "SourceFolder=" 

命令DIR输出只是文件,因为该选项的名称/A-D(目录条目与目录属性集)和/B的列表(裸格式)由于/O-D由最后修改日期反向排序,这意味着最先输出最新修改文件的名称。

通过错误输出消息DIR如果指定的文件夹不包含任何文件被写入重定向使用2>nul处理STDERR到设备NUL错误消息抑制。重定向运算符>在此处必须用脱字符^转义,以便在Windows命令解释程序处理整个命令行时将其解释为文字字符。稍后对于在后台的单独命令过程中执行命令dir "%SourceFolder%\*" /A-D /B /O-D 2>nul并捕获写入到STDOUT的输出。

对于选项skip=1导致跳过第一行捕获的输出,这意味着忽略最新修改文件的文件名。

FOR选项delims=禁用默认分裂所捕获的线的进入空间/制表符分隔的字符串作为每整个文件名应该由FOR执行的命令被分配给循环变量I供使用。

DEL删除文件,如果这是可能的。

为了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • del /?
  • dir /?
  • echo /?
  • for /?
  • set /?

阅读也是微软文章关于Using Command Redirection Operators

相关问题