Windows cmd FORFILES不能在批处理文件中工作,但可以在命令提示符下工作



在下面的批处理脚本中,带有命令FORFILES的行不起作用。当同一语句从不同的批处理文件或命令提示符中单独运行时,它可以正常工作。脚本中的所有其他语句都可以正常工作。对于类似的问题,我已经研究了所有的解决方案。

@echo off
setlocal
SET vFileShare=C:Usersasandetask
SET archiveFileList=ArchiveFilesList.txt
SET archFileTimestamp=%date:~10,4%%date:~7,2%%date:~4,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
rem SET archFileName=%fSignature%%archFileTimestamp%
SET archiveFolder=C:Usersasandetaskarchives
SET PATH=C:Program Files7-Zip
FORFILES /P %archiveFolder% /M *.zip /C "cmd /c del @file" /d -1
IF EXIST %vFileShare%%archiveFileList%. (
            cd %vFileShare%
            7z a -tzip %archiveFolder%%archFileTimestamp%.zip @ArchiveFilesList.txt
) ELSE (
     ECHO %archiveFileList% missing.>>%vFileShare%Polaris_DatedConversionRate.log.
 )

endlocal
GOTO: EOF

得到了答案,问题实际上是由以下两个语句引起的

设置路径=C:\Program Files\7-Zip

FORFILES/p%archiveFolder%/M*.zip/C"cmd/C del@file"/d-1

设置路径。。。。。。语句应位于FORFILES命令之后。如果将PATH设置为某个值,则即使在命令提示符下,FORFILES命令也将不起作用在运行FORFILES之前。(它抛出FORFILES未被识别为内部或外部命令。)

有人能进一步解释PATH为什么这么做吗?我认为它会影响其他一些类似的命令。

@file只是文件名。您的工作目录可能与%archiveFolder%不同,因此del找不到应该删除的文件,因为它找错了位置(%CD%而不是%archiveFolder%)。尝试改用@path

forfiles /p "%archiveFolder%" /m *.zip /d -1 /c "%comspec% /c del @path"
SET archiveFolder=C:Program Files7-Zip
FORFILES /P %archiveFolder% /M *.zip /C "cmd /c del @file" /d -1

相关内容

最新更新