【问题标题】:field width while using delayed expansion使用延迟扩展时的字段宽度
【发布时间】:2011-09-27 02:27:50
【问题描述】:

我正在使用 for 循环并构造要读取的 env 变量的名称(例如 abc%%i ,其中 i 是循环变量),并使用延迟扩展打印出它们的值(假设这些 env 变量有已经设置好了)..

echo is dos 提供了提及要打印的变量的字段宽度的工具,例如 echo %x:~-8% 将右对齐 x 的值,字段宽度将为 8 ..

但由于我使用的是延迟扩展,!abc%%i:~-8!似乎没有工作。

关于如何在使用延迟扩展时设置字段宽度的任何想法,??

幸福 迪帕克

【问题讨论】:

    标签: batch-file formatting dos


    【解决方案1】:

    我不知道谁告诉你 %x:~-8% 会填充你的变量,但他们错了,至少在我使用的 cmd 版本中 (XP)。

    如果变量为 8 或更多,则该构造将简单地给你最后 8 个字符。如果小于 8,您将获得变量本身,无填充。

    如果你想要填充它,你可以使用类似的东西:

    set y=        %x%
    echo %y:~-8%
    

    而且,从这个脚本可以看出,!abc%%i:~-8! 工作得很好,一旦你意识到你负责填充:

    @setlocal enableextensions enabledelayedexpansion
    @echo off
    for /f %%i in ('echo 1 ^&^& echo 92') do (
        set var%%i=        %%i
        echo !var%%i:~-8!
    )
    echo.=====
    set var
    endlocal
    

    这个输出:

           1
          92
    =====
    var1=       1
    var92=       92
    

    如你所料。

    【讨论】:

    • 感谢您的深刻回答。我误解了结构。这可以 。但我想知道是否有任何方法可以让我左对齐我的输出并设置字段宽度。现在我正在使用一个 exe 文件(C++)来为我做这件事(感谢 stroustrup)。但是这种方法似乎很不优雅,如果有什么方法可以做到和“全脚本”事件,请赐教!
    • 是的,再问一个问题 :-) 基本上,它归结为:set x=helloset y=%x%<10 spaces go here>,`echo %y:~1,10%(或类似的东西,我可能有数字略有偏差)。换句话说,在末尾添加十个空格以确保它至少足够长,然后使用您当前的方法来获取前 10 个字符 - 完成左对齐。与 right 相同 - 只是在前面而不是后面添加空格。
    • @Deepak 选择“接受”来帮助你的答案会让你更优雅;-)
    猜你喜欢
    • 2017-05-21
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    相关资源
    最近更新 更多