代码之家  ›  专栏  ›  技术社区  ›  VonC

批处理在for/f命令下提前关闭

  •  5
  • VonC  · 技术社区  · 17 年前

    for /f %%s in ('type version.txt') do set VERSION=%%s
    

    this SO question ),但另一方面 它杀死了cmd

    为什么?


    注意:计算机似乎具有类似的配置:XpSP2,用户具有管理权限,HKEY_CURRENT_user\Software\Microsoft\Command processor中未定义“命令处理器”。。。

    5 回复  |  直到 9 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    我得到了第一个经验性的答案:

    for /f %%s in (version.txt) do ...
    

    在每台电脑上都能正常工作。

    看来 for /f 使用文件名,而不是任何dos命令,如“键入文件名”。

    然而,并非所有客户的计算机都是如此(在某些情况下,“键入文件名”可以正常工作)

    如果您想要15(简单?)分;-),您可以留下问题的答案:


    编辑:3年后(!), barlop for /f closes cmd prompt immediately? “。他的结论是:

    COMSPEC 你在做什么的时候被列入名单了吗 SET 进来
    所以,我打开环境变量窗口,看到 未在用户或系统变量下列出。我将它添加到系统变量中,启动了一个命令提示符,它似乎工作正常。

    thread on ss64 forum Andriy M 在他对巴洛普问题的回答中,包含了细节。

    for “循环完成” dir “(或您要求完成的任何命令)需要 ComSpec 要设置以重新加载 cmd

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\ComSpec=
    %SystemRoot%\system32\cmd.exe
    
        2
  •  1
  •   Philibert Perusse    17 年前

    如果在脚本中使用命令扩展shell选项,强烈建议您在脚本开始时执行以下技巧。

    --从中粘贴的信息 http://www.ss64.com/nt/setlocal.html

    您可以在批处理文件中使用此选项,使用以下技术确定命令扩展名是否可用:

    VERIFY errors 2>nul
    SETLOCAL ENABLEEXTENSIONS
    IF ERRORLEVEL 1 echo Unable to enable extensions
    

    这是因为“验证错误”将ERRORLEVEL设置为1,如果扩展不可用,则SETLOCAL将无法重置ERRORLEVEL值(例如,如果脚本在command.com下运行)

        3
  •  0
  •   Keng    17 年前

    是不是文件没有扩展名,因此cmd将其视为不存在的目录?

        4
  •  0
  •   Craig Lebakken    17 年前

    如果启用了命令扩展名,则for命令的(set)参数可以是文件、字符串或命令。

    在“类型文件名”设置失败的客户端计算机上禁用命令扩展名。

        5
  •  0
  •   Keng    17 年前

    等等…可能是文件名周围有撇号吗? MS的意思是,文件名集使用双引号,文字字符串使用撇号。

    for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]
    
    for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]
    
    for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions]
    

    在直接字符串上,通过换行 文件之间的文件名集 (即“文件名集”)。文件名集 被视为一行输入

    推荐文章