【问题标题】:Windows cmd FORFILES not working in batch file,but works in command promptWindows cmd FORFILES 在批处理文件中不起作用,但在命令提示符下起作用
【发布时间】:2013-07-17 08:08:49
【问题描述】:

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

【问题讨论】:

  • 当你注释掉@echo off这一行时,你看到了什么?

标签: batch-file


【解决方案1】:

得到答案,问题实际上是由于以下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为什么这样做的答案。而且我认为它会影响其他一些类似的命令。

【讨论】:

  • %path% 是一个系统变量,由windows设置和使用。不要碰它。使用其他名称,例如mypath
  • 您可以在批处理文件中摆弄路径。没关系。它只会更改该批处理文件上下文中的路径。问题是您通过以这种方式设置路径完全删除了路径中已经存在的所有内容。你想要set Path=%Path%;C:\Program Files\7-zip。
  • 在您更改 PATH 后 FORFILES 不再工作的原因是它是可执行文件而不是内部命令。所以它根本找不到它了。除了调用FORFILES,您还可以调用C:\Windows\System32\forfiles.exe,然后再调用其余的行。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:
    SET archiveFolder=C:\Program Files\7-Zip
    FORFILES /P %archiveFolder% /M *.zip /C "cmd /c del @file" /d -1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 2010-12-13
      • 2013-07-13
      • 2010-11-20
      • 1970-01-01
      相关资源
      最近更新 更多