2011-09-27 36 views
1

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

echo是dos提供了提供要打印的变量的字段宽度的工具,如echo%x:〜-8%将右对齐x的值并且字段宽度将为8 ..

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

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

幸福 迪帕克

回答

2

我不知道谁告诉你的%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 

如你所愿。

+0

Thanx for ur insightful answer。我误解了这个构造。这可以 。但我想知道是否有任何方法,我可以左对齐我的输出和设置字段宽度。现在我正在使用一个exe文件(C++),它会为我做这件事(Thanx to stroustrup)。但是这种方法似乎不够雅观,如果有什么方法可以让它和“全剧本”外遇,请给我启迪一下! – Deepak

+1

是的,问另一个问题:-)基本上,它归结为:'set x = hello','set y =%x%<10 spaces go here','echo%y:〜1,10%(or这样的事情,我可能会稍微有些数字)。换句话说,在末尾添加十个空格以确保它至少足够长,然后使用当前的方法获取前10个字符 - 完成左对齐。与右图相同 - 只是在前面增加空格,而不是后面。 – paxdiablo

+0

完美的作品! Thanx Pax !!现在是一个优雅的男人! :) – Deepak