Batch file 使用延迟扩展时的字段宽度

Batch file 使用延迟扩展时的字段宽度,batch-file,formatting,dos,Batch File,Formatting,Dos,我正在使用for循环并构造要读取的环境变量的名称(如abc%%I,其中I是循环变量),并使用延迟扩展打印它们的值(假设这些环境变量已经设置) echo is dos提供了一种工具,可以提及要打印的变量的字段宽度,如echo%x:~-8%将右对齐x的值,字段宽度将为8 但由于我使用的是延迟扩展!abc%%i:~-8!似乎不起作用 关于如何在使用延迟扩展时设置字段宽度,有什么想法吗 幸福 Deepak我不知道是谁告诉您,%x:~-8%将填充变量,但它们是错误的,至少在我使用的cmd版本(XP)中是错

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

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

但由于我使用的是延迟扩展!abc%%i:~-8!似乎不起作用

关于如何在使用延迟扩展时设置字段宽度,有什么想法吗

幸福
Deepak

我不知道是谁告诉您,
%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++)来为我做这个(XANXX到StruouTUP)。但这种方法似乎不雅观,如果有什么办法可以让它和“全脚本”的事情发生,请一定要启发我!是的,问另一个问题:-)基本上,它可以归结为:
set x=hello
set y=%x%
,`echo%y:~1,10%(或者类似的,我可能会把数字稍微弄错)。换句话说,在末尾加上十个空格以确保至少足够长,然后使用当前方法完成前10个字符的左对齐。与右图相同,只是在前面加了空格,而不是在后面。@Deepak在答案中选择“接受”有助于让你更优雅;-)