Batch file 找不到批处理forfiles错误路径

Batch file 找不到批处理forfiles错误路径,batch-file,Batch File,我是一个批处理文件的新手,但是我正在寻找一个脚本来删除超过30天的.txt日志文件。。。FWIW,我在XP SP3上 我尝试按照找到的示例进行操作,包括从下载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)

我是一个批处理文件的新手,但是我正在寻找一个脚本来删除超过30天的.txt日志文件。。。FWIW,我在XP SP3上

我尝试按照找到的示例进行操作,包括从下载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
我在谷歌上搜索了很多次,但似乎弄不明白这个错误在说什么。建议使用forfiles.exe以使@variables工作,但我尝试了使用完整的forfiles路径,但似乎没有任何效果


至少有人能给我指出这个错误消息告诉我什么的正确方向吗?

为了看看我是否能,我拼凑了一个小的sumn-sumn来删除30天以前的文件,而不使用forfiles。确保pushd线设置为转到相应的目录。我从2013年1月31日减去2013年1月1日得到了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

诚然,这并不能准确地实现。例如,如果日志文件最后一次修改是在30天前的中午,而您在上午8:00运行此日志文件,则该文件可能会被删除,即使它还有4个小时才能达到30天。而且它的效率可能不如forfiles.exe

*耸耸肩,这是一条人迹罕至的路,我也走过了


编辑:HerbCSO还有另一个,可能这让我看起来像是Rube Goldberg ian的解决方案。

为了看看我是否可以,我拼凑了一点sumn sumn来删除超过30天的文件,而不使用forfiles。确保pushd线设置为转到相应的目录。我从2013年1月31日减去2013年1月1日得到了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

诚然,这并不能准确地实现。例如,如果日志文件最后一次修改是在30天前的中午,而您在上午8:00运行此日志文件,则该文件可能会被删除,即使它还有4个小时才能达到30天。而且它的效率可能不如forfiles.exe

*耸耸肩,这是一条人迹罕至的路,我也走过了


编辑:HerbCSO还有另一个,这可能使我的解决方案看起来像Rube Goldberg ian解决方案。

@file只是文件名。它不包括路径。如果批处理文件未在路径中执行,则不会看到要删除的文件,因为您位于不同的工作目录中。

@file只是文件名。它不包括路径。如果批处理文件没有在您的路径中执行,它将看不到要删除的文件,因为您位于不同的工作目录中。

我不敢相信错误来自您的示例行。 My forfiles Win7因-p和路径之间缺少空格而引发错误

对于批处理命令,错误消息的文本不正常。 我不知道有哪一个批处理命令能告诉你哪一行发生了错误,哪一个参数是错误的

所以我相信你从完全不同的来源得到了错误信息。 或者你有第二个forfiles命令来做一些完全不同的事情。
或者您是否将某个测试命名为files.bat?

我不敢相信错误来自您的采样线。 My forfiles Win7因-p和路径之间缺少空格而引发错误

对于批处理命令,错误消息的文本不正常。 我不知道有哪一个批处理命令能告诉你哪一行发生了错误,哪一个参数是错误的

所以我相信你从完全不同的来源得到了错误信息。 或者你有第二个forfiles命令来做一些完全不同的事情。
或者您是否将一个测试命名为files.bat?

好吧,我不是肯定的,但这个问题可能是来自Microsoft的forfiles.exe的一个坏问题。最后,我从下载了第二个用于Windows Server 2003的forfiles.exe

在替换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.exeP

编辑:


我很想知道其他人是否在上面的链接中成功使用了Microsoft的.exe?否则,可能只是我的特定设置造成的…

嗯,我不确定,但似乎这个问题可能对Microsoft的files.exe不利。最后,我从下载了第二个用于Windows Server 2003的forfiles.exe

在替换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.exeP

编辑:

<
p> 我很想知道其他人是否在上面的链接中成功使用了Microsoft的.exe?否则可能是我的特殊设置造成的…

也许你只是错过了-p之后的空格?@Kayasax一开始我以为它也需要一个,但当我在没有空格的情况下运行它时,我得到了无效的目录:。我又把它弄得一团糟,意识到空间是不需要的。如果我在没有空间的情况下运行它并输入无效的文件路径,我会得到无效的目录:D:\Blah。。。所以我很确定这不是问题所在,但我很感激你的建议!这个forfiles-c cmd/c echo hello从命令行和批处理中得到了什么?@jeb,对不起,我在替换了我的forfiles.exe后才看到这个,请参见下面的答案。。。现在我得到一堆问候:也许你只是错过了-p之后的空格?@Kayasax一开始我还以为它也需要一个,但是当我在没有空格的情况下运行它时,我得到了无效的目录:。我又把它弄得一团糟,意识到空间是不需要的。如果我在没有空间的情况下运行它并输入无效的文件路径,我会得到无效的目录:D:\Blah。。。所以我很确定这不是问题所在,但我很感激你的建议!这个forfiles-c cmd/c echo hello从命令行和批处理中得到了什么?@jeb,对不起,我在替换了我的forfiles.exe后才看到这个,请参见下面的答案。。。现在我得到了一堆问候:这可能是一个很好的观点,但我也尝试用@PATH\@FILE替换@FILE,这是另一个SO用户建议的,这给了我同样的错误。。。我尝试了@FILE、@PATH和@PATH\@FILE,但都没有解决错误…@sǝɯɐſPATH是带有文件名的完整路径@file是扩展名为的完整文件名。这可能是一个很好的观点,但我也尝试用@PATH\@file替换@file,这是另一位SO用户建议的,这给了我同样的错误。。。我尝试了@FILE、@PATH和@PATH\@FILE,但都没有解决错误…@sǝɯɐſPATH是带有文件名的完整路径@文件是带有扩展名的完整文件名。我发现我有很多关于批处理脚本的知识需要学习,这些在我看来都是中文的:哈哈。。。我感谢你的努力,如果我不能解决我的错误,我可能会尝试使用这样的东西。。。但我更愿意让我的一行程序正常工作:我看到我有很多关于批处理脚本的知识需要学习,这些在我看来都是中文的:哈哈。。。我感谢你的努力,如果我不能解决我的错误,我可能会尝试使用这样的东西。。。但我更愿意让我的一句话起作用:我不知道到底是什么问题,但你的回答让我朝着正确的方向走。。。显然问题出在forfile.exe文件上,因为我在另一个站点上尝试了一个,它工作得非常好。谢谢你的帮助!我不知道到底是什么问题,但你的回答让我找到了正确的方向。。。显然问题出在forfile.exe文件上,因为我在另一个站点上尝试了一个,它工作得非常好。谢谢你的帮助!