我有一个批处理文件(在Windows XP中,激活了命令扩展名),其中包含以下行:
for /f %%s in ('type version.txt') do set VERSION=%%s
在某些计算机上,它运行正常(如此SO问题所示),但在其他计算机上它会杀死cmd(控制台窗口刚刚关闭)
为什么?
注意:计算机似乎有类似的配置:XpSP2,用户具有管理权限,HKEY_CURRENT_USER\Software\Microsoft\Command Processor中没有定义"命令处理器"...
我得到了第一个经验答案:
for /f %%s in (version.txt) do ...
在每台计算机上工作得很好.
它似乎for /f
适用于文件名,而不是任何dos命令,如'type filename'.
但是,对于我所有客户端的计算机来说都不是这样(在某些情况下,'类型文件名'工作正常)
如果你想要15(简单?)点数;-),你可以回答这个问题:
为什么'for/f'有时不能用于文件名以外的任何其他内容.为什么它只是关闭DOS会话?
编辑:3年后(!),barlop面临类似情况,详细问题" for /f
立即关闭cmd提示? ".他的结论是:
COMSPEC
在做SET
+ 时确实被列出了ENTER.
因此,我打开了环境变量窗口,并且COMSPEC
未在用户或系统变量下列出.我将它添加到系统变量,启动命令提示符,它似乎工作正常.
这线程ss64论坛,由提到舍甫琴科中号在回答barlop的问题,包含的细节.
在"
for
"循环中完成'dir
'(或者你要求完成的任何命令)中的shelling需要ComSpec
设置才能重新加载cmd
窗口.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\ComSpec= %SystemRoot%\system32\cmd.exe