删除文件夹中的文件,但保留最后生成的文件

时间:2017-09-25 15:27:15

标签: batch-file cmd delete-file

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

目前我们有这个脚本删除特定文件夹中的所有文件(在这种情况下,C:\ Temp中的所有文件):

using namespace std;

class Outer{
    Test t;
    //delete copy constructor etc.
public:
    Outer(){
        new (&t.s)string("Hello World");
    }

    ~Outer(){
        t.s.~string();
    }
};

我们如何编辑该代码以保留文件夹中生成的最后一个文件?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

<uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

命令 DIR 会输出一个仅包含文件名的列表,因为选项@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=" (目录属性未设置的目录条目)和{{1} }(裸格式)由于/A-D而被最后修改日期反向排序,这意味着首先输出最新修改文件的名称。

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

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

FOR 选项dir "%SourceFolder%\*" /A-D /B /O-D 2>nul禁用默认将捕获的行拆分为空格/制表符分隔的字符串,因为每个整个文件名都应分配给循环变量skip=1以供使用由 FOR 执行的命令。

如果可能的话,

DEL 会删除该文件。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • delims=
  • I
  • del /?
  • dir /?
  • echo /?

另请阅读Microsoft有关Using Command Redirection Operators

的文章