batch-file - 删除 Windows 目录中最旧的文件
问题描述
我正在开发一个批处理脚本,该脚本在文件夹中查找最旧的文件并将其删除,只留下最新的文件。我已经设法将以下脚本拼凑在一起,但是我无法使 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
该脚本准确显示文件夹中的文件数量,并通过回显确认。我打算循环脚本,直到只剩下一个文件,但命令提示符在第二次暂停后关闭。
我特意添加了分号来指出哪里出错了。
解决方案
我看不到分号!冒号,我明白了——但不是分号。
echo if "%cnt%"=="1" (breakLoop)
如果echo
删除了,如果cnt
是1
,那么这将尝试执行 breakloop
您需要goto breakloop
跳到标签:breakloop
。
echo if "%cnt%" == "1" ( echo %cnt% file(s) remain! )
奇怪的是)
- 它终止了前一级括号,但(
在echo
语句中被视为普通文本字符。要将第一个)
解释为普通字符,您需要使用插入符号对其进行转义^
:^)
如果您从提示符运行此批处理而不是单击它,您会看到cmd
对语法的抱怨。
至于for /f
- 好吧,如果你要使用-date倒序/o-d
排序,那么遇到的第一行就是你希望保留的文件。
通过从提示符for
执行来查看语法。for /?
您会发现有一个方便的skip
选项可以n
在处理列表之前跳过列表的第一行,因此如果您要使用 a 跳过第一行,skip=1
那么您将保存最年轻的并杀死其余的。
推荐阅读
- python - Python多处理为每个进程创建相同的对象实例
- elasticsearch - 带有来自另一个查询的过滤器的弹性搜索查询
- c# - .Net Framework 和 .Net Core 的通用配置策略
- python - 如何获得Scaled YOLOv4的准确度和精度
- dojo - 当我打开工作流时获取所有属性 - 使用方面在内容导航器中启动页面或任务页面
- excel - 根据降序值创建列表并包含重复项
- .net - 从 vb.net 中受信任的活动目录中获取用户
- javascript - 有没有比我在这里写的更好的方法来比较两个具有不同键的对象?
- google-chrome-extension - 在 Electron 中实现 Chrome 远程桌面
- android - React Navite - 导航屏幕布局推荐