我是一个批处理文件的新手,但我正在寻找一个脚本来删除超过30天的.txt日志文件......(FWIW,我在XP SP3上......)
我尝试按照here找到的示例,(包括从here下载forfiles.exe
)并最终得到此结果:
forfiles -p"D:\SQL Database Back Ups\Update_FmlaManagement_Log" -s -m *.txt -d-30 -c "cmd /c del @FILE"
但是我收到了这个错误:
Error path not found (3rd argument) line 545
我做了很多谷歌搜索,但似乎无法弄清楚这个错误是在谈论什么。 Somebody建议使用forfiles.exe
以使@variables
正常工作,但我尝试了(以及完整的forfiles路径),似乎没有任何工作......
有人至少可以指出我这个错误信息告诉我的正确方向吗?
答案 0 :(得分:1)
只是为了看我是否可以,我拼凑了一点sumn sumn一起删除30天以前的文件而不使用forfiles
。确保将pushd
行设置为转到相应的目录。我从2013年1月31日减去01/01/2013得到了2592000
。
@echo off
setlocal enabledelayedexpansion
pushd "D:\SQL Database Back Ups\Update_FmlaManagement_Log"
set today=%date:~-10%
call :toEpoch %today%
set /a thirtyDaysAgo=%epoch% - 2592000
for /f "tokens=1,5*" %%I in ('dir /o:d *.txt ^| findstr "txt$"') do (
call :toEpoch %%I
if "%%K"=="" (set file=%%J) else (set file=%%J %%K)
if /i %thirtyDaysAgo% GTR !epoch! del /q "!file!"
)
popd
goto :EOF
:toEpoch date
echo wscript.echo datediff("s", "01/01/1970 00:00:00", "%1")>epoch.vbs
for /f %%x in ('cscript /nologo epoch.vbs') do set epoch=%%x
del /q epoch.vbs
goto :EOF
(VBscript借鉴Cameron Oakenleaf。)
不可否认,这不会准确无误。例如,如果日志文件是在30天前中午最后一次修改的,并且您在上午8:00运行该文件,则该文件可能会被删除,即使它还有4个小时可以达到30天。而且它可能没有forfiles.exe那么高效。
*shrug*
这是一条少走过的路,我走了过去。
编辑: HerbCSO有另一个,可能是better implementation,这使我看起来像Rube Goldberg-ian解决方案。
答案 1 :(得分:1)
@file只是文件名。它不包括路径。如果您的批处理文件未在您的路径中执行,则它将不会看到要删除它的文件,因为您位于不同的工作目录中。
答案 2 :(得分:1)
我无法相信错误来自您的样本行
我的forfiles(Win7)为-p
和路径之间的缺失空间引发了错误。
批处理命令的错误消息文本不正常 我不知道任何批处理命令告诉你错误发生的行,也不知道哪个参数错误。
所以我相信你从一个完全不同的来源得到了错误信息
或者你有第二个forfiles
命令完成其他任务。
或者您是否将其中一个测试命名为forfiles.bat
?
答案 3 :(得分:1)
好吧,我不是肯定的,但似乎这个问题可能是来自微软FTP server的错误forfiles.exe
。我最终从this guy's site(direct download)下载了第二个forfiles.exe
(对于Windows Server 2003)。
替换C:\WINDOWS\system32
中的原始exe并删除了我的下载文件夹中的副本后,我将语法从破折号改为正斜杠,如下所示:
forfiles /p "D:\SQL Database Back Ups\Update_FmlaManagement_Log" /s /m *.txt /d -30 /c "cmd /c del @FILE"
这首先尝试完美!
所以我想答案是,不要从微软的FTP服务器下载forfile.exe
? :P
修改强>
我很想知道其他人是否在上面的链接中成功使用了Microsoft的.exe?否则,这可能只是我特定的设置......