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

时间:2013-07-17 08:08:50

标签: batch-file

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

3 个答案:

答案 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
相关问题