在下面的批处理脚本中,带有命令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