在下面的批处理脚本中,带有命令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
答案 0 :(得分:3)
得到答案,问题实际上是由于遵循2条陈述
设置路径 = C:\ Program Files \ 7-Zip
FORFILES / P%archiveFolder%/ M * .zip / C“cmd / c del @file”/ d -1
SET PATH ......语句应该在 FORFILES 命令之后。 如果将 PATH 设置为某个值, FORFILES 命令即使在命令提示符下也不起作用 在运行 FORFILES 之前。 (抛出FORFILES不被视为内部或外部命令。)
任何人都可以提高答案为什么PATH会这样做。我认为它会影响其他一些命令。
答案 1 :(得分:0)
@file
只是文件名。您的工作目录可能与%archiveFolder%
不同,因此del
找不到它应删除的文件,因为它查找的位置错误(%CD%
而不是%archiveFolder%
)。请尝试使用@path
:
forfiles /p "%archiveFolder%" /m *.zip /d -1 /c "%comspec% /c del @path"
答案 2 :(得分:-1)
SET archiveFolder=C:\Program Files\7-Zip
FORFILES /P %archiveFolder% /M *.zip /C "cmd /c del @file" /d -1