我需要使用批处理脚本删除特定文件夹中的文件,但是,我需要保留最后生成的文件。我们的服务器有一个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();
}
};
我们如何编辑该代码以保留文件夹中生成的最后一个文件?
提前感谢您的帮助。
答案 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。
的文章