【问题标题】:for /f closes cmd prompt immediatelyfor /f 立即关闭 cmd 提示符
【发布时间】:2011-08-29 22:01:47
【问题描述】:

当我打开 cmd.exe 并键入第一行并按 ENTER 时,它工作正常。当我输入另一行并按 ENTER 时,它会立即关闭。

我可以将 ('a') 更改为 ('asdfgh') 然后同样的问题。或 %q 到 %f 相同的问题。

不同之处在于 /f,由于某种原因,带有 ('......') 的 FOR /F 会导致 cmd.exe 关闭。

这发生在我的一个系统上,而不是另一个系统上

C:\>for %q in ('a') do echo %q   <ENTER>

C:\>echo 'a'
'a'

C:\>for /f %q in ('a') do echo %q <ENTER>

【问题讨论】:

  • 什么版本的 Windows?它适用于 Windows 7 HP SP1。我的意思是,它不会终止 CMD 会话,但会打印关于 a 是错误命令的错误。
  • XP SP3。它不应该在任何版本的 Windows 中关闭 cmd 提示符,但在这台机器上会。
  • 看起来问题在这些方面不是未知数:stackoverflow.com/questions/261296/…

标签: windows command-line cmd


【解决方案1】:

这家伙似乎成功地解决了一个非常相似的问题:

for /f closes cmd window immediately

这种情况下的问题原来与 COMSPEC 环境变量有关,它最初设置不正确,看起来如此。这家伙申请退出 Windows 帐户并重新登录。

【讨论】:

  • COMSPEC 确实在执行 SET 时被列出 所以,我打开环境变量窗口,看到 COMSPEC 没有在用户或系统变量下列出。我将它添加到系统变量中,启动了命令提示符,它似乎工作正常。
  • +1 这真是一个绝妙的发现。我没想到有人能回答。
  • 你在对我的问题的评论中提到的那个问题,有 2200 次浏览,没有人得到它。你应该获得奖牌!
  • 奇怪的是,ss64.org 论坛上该主题的标题,除了一个字符外,与我的字符相同!他的更准确,但不包括问号(一个字符差异),我想我会删除我的问号!
  • @barlop:令人着迷的是,您和 Google 都认为“提示”和“窗口”是同一个词。 :) 我搜索了"for /f" closes command prompt,在结果中windowprompt 都以粗体突出显示。除此之外,我同意你提到的巧合确实令人震惊。
【解决方案2】:

添加一个括号“(”,像这样:

for %q in ('a') do (

它会提示您“更多?”在以下几行中,直到您决定用“)”关闭您的 for 块

【讨论】:

  • C:\>for /f %f in ('echo abc') do ( More? echo hello More? echo hello More?)
【解决方案3】:

查看'FOR'('FOR /?')的帮助,可以看到'/F'选项是用于解析文件输入的,有以下选项:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

请注意最后一个条目...单引号值被视为要运行的命令,该命令的输出就是“FOR”正在解析的内容。

也许您在一台机器上有一个“a”命令/可执行文件,但在另一台机器上没有?

如果你特别想要'/F'提供的行为,你应该只使用'/F'标志。

【讨论】:

  • 我说我尝试将 a 更改为 asdf,同样的问题。在这些情况下,它应该说没有这样的程序/“'adsf' 未被识别为内部或外部命令”。它仍然不应该关闭。此行还会导致 cmd 提示关闭 C:\>for /f %f in ('echo asdf') do set ttt=%f 这是一台机器上的问题,而不是另一台机器上的问题。
  • 很公平......看起来实际问题(错误设置 COMSPEC)是一个真正的问题。尽管如此,使用--或不使用--'/F' 会改变'FOR' 的语义含义。您不应该期望能够交换它们。 (尽管您应该能够期望它不会崩溃。:-))
  • 我知道 /F 做了什么。我的示例是通过显示症状来演示问题,其优点是它是一个简单的示例。我没有说 comspec 设置错误,这看起来像是 Andriy M 说的很可能是错误的,因为他的消息来源并没有说它设置错误。就像我说的那样。当它从 SET 出现时,它很可能具有正确的值,我敢打赌它确实如此,但它需要在环境变量窗口/注册表中的那个位置中设置。
猜你喜欢
  • 2023-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多