我需要完成我的批处理脚本。我的路径为C:\ Users \ Mahmo03S \ Shaban。在那条路径中,有几个子文件夹。安思 在子文件夹Ansys中,甚至还有更多子文件夹=它是一个文件夹树。如果文件夹和子文件夹中的每个文件都超过3天,则我的批处理脚本需要删除Ansys文件夹。如果在过去3天内仅修改了Ansyn中的一个文件,则Ansys不会发生任何事情。我尝试提出一个可靠的解决方案,但是:批处理文件删除了Ansys目录中的子子文件夹,因为自3天以来未修改该子子文件夹中的文件。
我有3个批处理文件正在执行任务。
脚本
@echo off
setlocal enableextensions
pushd C:\Users\Mahmo03S\Desktop\Shaban
set /p check="Select a date:"
Rem When prompted with above line type the date 3 days ago.
forfiles /c "cmd /c (IF @isdir==TRUE call C:\Users\Mahmo03S\Desktop\Search.bat "@path" "%check%")"
popd
Search.bat
set del=TRUE
forfiles /p %1 /d -%2 /s /m * /c "cmd /c (IF @isdir ==TRUE call C:\Users\Mahmo03S\Desktop\DeleteFolders.bat "@path" "%check%" "%del%")"
DeleteFolders.bat
set del=FALSE
if %del%==FALSE (rmdir /S /Q %1)
问题是:我在文件夹Ansys中有一个子文件夹(例如,hello)。在hello文件夹中,每个文件都超过3天。该脚本将删除它不应删除的hello文件夹。仅当文件夹中的每个文件都超过3天时,才应删除Ansys。如果在过去3天中仅在Ansys文件夹中修改了一个文件,则不应删除Ansys文件夹中的任何内容。
我制作了批处理文件,因此如果每个文件都超过3天,它将删除Ansys文件夹。但是,不应仅仅因为子文件夹中的文件早于3天而删除该子文件夹。
我怎样才能做到这一点?
可以使工作解决方案变得简单得多;)
您可以检测到FORFILES是否打印了任何结果,如果没有打印任何结果,则采取措施。
使用FOR / D迭代直接子文件夹。对于每个文件夹,运行FORFILES以查找截止日期或更晚的文件。如果您不必担心忽略文件夹,则只需根据FORFILES返回代码执行操作。但是,您不希望基于新的但空的文件夹得到误报。您可以使用FINDSTR检测FORFILES是否打印了任何文件名,如果没有打印,则删除文件夹树。如果FORFILES找到新文件夹,它仍然会打印一个空行,因此您必须使用搜索字符,.
而不是使用搜索行"^"
。
@echo off
setlocal disableDelayedExpansion
set "root=C:\Users\Mahmo03S\Shaban"
set /p "cutoff=Enter a cutoff date (mm/dd/yyyy): "
for /d %%F in ("%root%\*") do (
2>nul forfiles /p "%%F" /d %cutoff% /s /c "cmd /c if @isdir==FALSE echo @file"
) | >nul 2>nul findstr . || rd /s /q "%%F"
StackOverflow和其他地方发布了多种方法,它们显示了如何批量执行日期算术。我偏爱名为getTimestamp.bat
的混合JScript / batch实用程序。它是纯脚本,可从XP开始在任何现代Windows机器上运行-无需第三方可执行文件。它充满了各种选择,使您几乎可以进行您想像中的任何日期计算。
假设getTimestamp.bat
位于您当前的目录中,或者更好的是位于PATH中的某个位置,那么可以使用以下行来计算截止日期,而不用提示输入日期:
call gettimestamp -OD -3 -F {mm}/{dd}/{yyyy} -R cutoff
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句