删除Windows目录

时间:2018-06-07 07:11:44

标签: batch-file

我正在处理一个批处理脚本,它找到文件夹中最旧的文件并将其删除,只留下最新的文件。我已经设法将以下脚本拼凑在一起,但是我无法让if语句正常工作。

@echo off
set cnt=0
for %%A in (C:\Test\*) do set /a cnt+=1
echo File count = %cnt%

pause

echo if "%cnt%"=="1" (breakLoop)
echo if "%cnt%" == "1" ( echo %cnt% file(s) remain! )
pause
:: if "%cnt%" == "1" ( 
:: echo %cnt% file(s) remaining! 
:: )


for /f "delims=" %%a in ('dir /b /a-d /t:w /o:d "C:\Test\*.*"') do (
    echo del "C:\Test\%%a"
     del "C:\Test\%%a"
    )
pause
:breakLoop

该脚本准确显示文件夹中的文件数量,这是通过回声确认的。我打算循环脚本,直到只剩下一个文件,但命令提示符在第二次暂停后关闭。

我故意添加分号以指出它出错的地方。

1 个答案:

答案 0 :(得分:2)

我看不到分号!我看到冒号 - 但不是分号。

echo if "%cnt%"=="1" (breakLoop)

如果移除了echo,如果cnt1,则会尝试执行 breakloop您需要goto breakloop }跳到标签:breakloop

echo if "%cnt%" == "1" ( echo %cnt% file(s) remain! )

关于)的奇怪之处 - 它终止了前一级括号,但(语句中的echo被视为普通文本字符。要将第一个)解释为普通字符,您需要使用插入符^来转义它:^)

如果您是从提示中运行此批处理而不是点击它,则会看到cmd对语法的抱怨。

至于for /f - 如果你使用/o-d来排序反向 - 日期顺序,那么第一个行遇到的是您希望保留的文件。

通过从提示符执行for来查看for /?语法。你会发现有一个方便的skip选项可以在处理之前跳过列表的第一行n,所以如果你要用skip=1跳过第一行,那么你&& #39; d保存最年轻的并杀死其余部分。