2

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

@echo off
setlocal

SET vFileShare=C:\Users\asande\task\
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:\Users\asande\task\archives\
SET PATH=C:\Program Files\7-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
4

3 回答 3

3

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

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

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

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

任何人都可以增强PATH为什么这样做的答案。我认为它会影响其他一些类似的命令。

于 2013-07-18T09:28:56.100 回答
0

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

forfiles /p "%archiveFolder%" /m *.zip /d -1 /c "%comspec% /c del @path"
于 2013-07-17T09:54:41.080 回答
-1
SET archiveFolder=C:\Program Files\7-Zip
FORFILES /P %archiveFolder% /M *.zip /C "cmd /c del @file" /d -1
于 2017-08-29T00:29:59.247 回答