【问题标题】:Cmd.exe closes during "for" commandCmd.exe 在“for”命令期间关闭
【发布时间】:2017-07-30 17:27:29
【问题描述】:

Cmd.exe 在执行 for 命令期间关闭和终止批处理文件。谁能帮我修改 .bat 文件以使其运行完成?

批处理文件有以下几行:

start "" "autohotkey.exe" "p:\script.ahk"

timeout /t 3

cd C:\windows\system32\wbem

for /f %D in ('wmic volume get DriveLetter^, Label ^| find "EHD_BACKUP"') do set myDrive=%D

timeout /t -1

cd C:\Program Files\VeraCrypt

使用 pause 命令我确定 .bat 文件运行良好,直到 CMD.exe 自动关闭时执行“for”命令,这会阻止批处理文件完成。

当我在命令窗口中(在 .bat 文件之外)单独运行“for”命令时,它会按预期运行并为 myDrive 变量提供预期的响应。但是运行成功后会返回2个提示-如下:

C:\windows\system32>for /f %D in ('wmic volume get DriveLetter^, Label ^| find "EHD_BACKUP"') do set myDrive=%D

C:\windows\system32>set myDrive=K:

C:\windows\system32>

如何修改我的批处理文件,使其在 for 命令期间不会关闭?对 for 的双线响应不寻常,我怀疑这是导致此问题的原因,但不知道如何解决。

【问题讨论】:

  • 在你的批处理脚本中,在你有cd C:\Program Files\VeraCrypt.exe 的for 命令之后,VeraCrypt.exe 是一个目录的名称吗?由于ProgramFiles 之间有一个空格,您可能还想用引号将路径括起来。
  • 嗨 - 这是我输入问题时的错误。 .bat 文件实际上是 CD c:\program files\veracrypt(我错误地添加了 .exe)。我在我的原始问题中更正了这一点。问题是我的 .bat 文件在到达此命令之前终止 - 它在运行 for /f %D .... 行时终止。谢谢!
  • 当您从 cmd 窗口启动批处理,而不是从资源管理器单击 时,您会看到错误消息 D can't be processed here。这是因为 FOR 命令需要在批处理文件中占双倍百分比(就像 HELP FOR 解释的那样)

标签: batch-file cmd


【解决方案1】:

你必须在变量前使用 %% 而不是 %

{ % 变量 | %% 变量}:必需。表示可替换的参数。使用 %variable 从命令提示符执行 for。使用 %%variable 在批处理文件中执行 for 命令。变量区分大小写,必须用 alpha 值表示,例如 %A、%B 或 %C。

https://technet.microsoft.com/en-us/library/bb490909.aspx

【讨论】:

  • 也可以使用其他字符而不是字母字符,例如#$ 作为循环变量。如果由于使用多个令牌而不需要多个循环变量,我更喜欢将# 用于我自己的批处理文件作为循环变量。 ABC 等通常更好,因为tokens=1,3,5-8* 例如,第一个令牌分配给循环变量A,第三个令牌分配给下一个变量根据ASCII tableB,以此类推。
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2022-01-16
  • 2012-10-13
  • 2010-09-06
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多