2011-08-29 102 views
2

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

我可以改变('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> 
+0

什么版本的Windows?它适用于Windows 7 HP SP1中的我。我的意思是,它不会终止CMD会话,但会打印关于'a'作为错误命令的错误。 –

+0

XP SP3。它不应该在任何版本的Windows中关闭cmd提示符,但它会在本机上执行。 – barlop

+0

看起来问题在这些方面不是未知:http://stackoverflow.com/questions/261296/batch-closes-prematurely-on-a-for-f-command –

回答

4

这家伙似乎已经解决了成功的一个非常类似的问题:

for /f closes cmd window immediately

在这种情况下,原来,这个问题有一个与COMSPEC环境变量做的,它被错误地设置开始,因为它看来。该家伙申请退出Windows帐户并返回。

+0

COMSPEC在做SET时已经获得列表 因此,我打开了环境变量窗口,并且看到COMSPEC未在用户或系统变量下列出。我将它添加到系统变量,启动了一个命令提示符,它似乎工作正常。 – barlop

+0

+1这确实是一个很棒的发现。我并不期待任何人能够回答它。 – barlop

+0

你在我的问题的评论中提到的那个问题有2200个观点,没人知道。你应该得到一枚奖牌! – barlop

0

添加paranthesis“(”像这样的:在

for %q in ('a') do (

它会提示你一个“更多?”以下几行,直到你决定用“”来关闭你的for块

+0

C:\> for/f%f in ('echo abc')do( More?echo hello More?echo hello 更多?)< - 所以我打了)然后我打了ENTER,cmd提示突然关闭。 – barlop

0

查看'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'标志。

+0

我说过我试过换一个asdf,同样的问题。在这些情况下,应该说没有这样的程序/“'adsf'不被识别为内部或外部命令”。它仍然不应该关闭。这一行还会导致cmd提示符关闭C:\>('echo asdf')中的/ f%f。do set ttt =%f这是一台机器上的问题,而不是另一台机器上的问题。 – barlop

+0

够公平的......看起来像实际的问题(错误设置COMSPEC)是一个真正的困难。尽管如此,使用或不使用'/ F'会改变'FOR'的语义。你不应该期望能够交换它们。 (虽然你*应该能够期望它不会崩溃。:-)) – JaredReisinger

+0

我知道/ F做了什么。我的例子是通过显示症状来证明问题,其优点是它是一个简单的例子。我没有说comspec是错误的,这看起来像Andriy M最可能错误地说,因为他的消息来源没有说它是错误的。正如我所说。当它来自SET 时,它可能会有正确的值,我敢打赌,但它需要在环境变量窗口/注册表中的那个位置设置。 – barlop