我正在尝试编写一个批处理文件进程,该进程将首先找到所有不包含字符串的文件(我已经获得该部分)然后它将检查以确定该文件是否超过10天(这是我的坚持点)。我之前已经设置了删除文件,删除了10天之前的文件,但我仍然试图弄清楚如何将这些文件组合起来。
@echo off
set "MySearchString=123 abc nyu texas"
for %%a in (C:\Users\xyz\Documents\TEMP\Junk\*.*) do for /f "delims=" %%i in ('echo("%%~na" ^| findstr /i /v "%MySearchString%"') do echo "%%~fa"
最后一次" echo" %% fa"是我希望删除代码的地方。关于我如何能够删除字符串排除结果的任何想法?
谢谢
答案 0 :(得分:0)
这在PowerShell中更简单,更直接。这是一种方法:
Get-ChildItem "C:\Users\xyz\Documents\TEMP\Junk\*.*" |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-10) } |
ForEach-Object {
if ( (Select-String "123 abc nyu texas" $_ | Measure-Object).Count -eq 0 ) {
Remove-Item $_ -WhatIf
}
}
您可以删除-WhatIf
参数,以确保要删除的文件符合您的预期。
请注意Select-String
使用正则表达式,除非您使用-SimpleMatch
参数告诉它不要这样做。
答案 1 :(得分:0)
以下批量代码不是答案,只是对您发布的内容进行了修改。
@Echo Off
Set "MyTargetDir=%UserProfile%\Documents\TEMP\Junk"
Set "MySearchStrings=123 abc nyu texas"
CD /D "%MyTargetDir%" 2>Nul || Exit /B
For /F "Delims=" %%A In ('Dir /B/A-D-S-L^|FindStr /IV "%MySearchStrings%"'
) Do Echo %%A
Pause
对于任务的剩余部分,您显然应该修改Echo
命令,Call
带有特定代码的标签或直接运行命令;使用%%A
。如果目标目录中有许多文件,您甚至可能希望先执行最后写入或创建日期的检查。我目前无法帮助您,因为您没有自己尝试过,(这不是订购服务的代码),而且您提供的信息不足以说明您的不足之处意味着10天。
为了确定文件年龄,我建议使用RoboCopy
或ForFiles
作为替代方案。在这个网站上有很多这样做的例子;请仔细阅读一些答案并尝试根据您的具体要求进行修改,如果您没有达到目标,请相应地更新您的问题。
因为你是一个业余爱好者'在批处理文件中,建议您最好学习并使用PowerShell
,这样可以更好地执行此任务。
这是一个可能的PowerShell示例:
Get-ChildItem '$Env:UserProfile\Documents\TEMP\Junk\*.*' -Exclude *123*, *abc*, *nyu*, *texas* |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-10) } | Remove-Item -WhatIf