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

Batch file Windows cmd FORFILES不在批处理文件中工作,但在命令提示符下工作,batch-file,Batch File,在下面的批处理脚本中,带有FORFILES命令的行不起作用。 当从不同的批处理文件或命令提示符单独运行同一语句时,该语句可以正常工作。 脚本中的所有其他语句都可以正常工作。 对于类似的问题,我已经研究了所有的解决方案 @echo off setlocal SET vFileShare=C:\Users\asande\task\ SET archiveFileList=ArchiveFilesList.txt SET archFileTimestamp=%date:~10,4%%date:~7,

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

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

forfiles /p "%archiveFolder%" /m *.zip /d -1 /c "%comspec% /c del @path"

得到了答案,问题其实是由于以下两个陈述

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

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

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


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

当您注释掉
@echo off
行时,您会看到什么?
%path%
是一个系统变量,由windows设置和使用。别碰它。使用另一个名称,例如
mypath
您可以在批处理文件中修改路径。很好。它仅更改该批处理文件上下文中的路径。问题是,通过将路径设置为这种方式,您将完全删除路径中已经存在的所有内容。您需要
设置路径=%Path%;改为C:\Program Files\7-zip
。更改
路径后,FORFILES不再工作的原因是它是一个可执行文件,而不是内部命令。所以它再也找不到了。您也可以调用
C:\Windows\System32\FORFILES.exe,然后再调用行的其余部分,而不是只调用
FORFILES
SET archiveFolder=C:\Program Files\7-Zip
FORFILES /P %archiveFolder% /M *.zip /C "cmd /c del @file" /d -1