根据变量的不同空间数

时间:2015-01-24 11:53:45

标签: variables batch-file space

我正在尝试创建一种看起来像这样的列表:

echo thing1          thing2
echo.

然后 for 循环列出目录中的文本文件和一些信息,如下所示:

echo %var%           %var1%
echo %var%           %var1%
rem and so on

但是无论变量的长度是多少,总会有11个空格将它与标题放在一起。

我知道我可以制作一些代码来检测长度并在变量中保存一些空格然后再添加它。

但我只是想知道是否还有另一种更简单的方式。

1 个答案:

答案 0 :(得分:0)

没有提到弦的确切方式,所以我会留给你。 以下是如何在两个变量之间设置空格,结果将具有固定长度。

@echo off
rem http://ss64.org/viewtopic.php?id=424

set max_len=25


set "var11=thing1"
set "var12=thing2"

set "var21=thing1xxxxxx"
set "var22=thing2"

set "var31=thing1xxxxxx"
set "var32=thing2"

call :setSpaces var11 var12
call :setSpaces var21 var22
call :setSpaces var31 var32



goto :eof

:setSpaces var1 var2 [RtnVar]
setlocal EnableDelayedExpansion
set "var1=!%~1!"
set "var2=!%~2!"

call :strlen0 var1 len1
call :strlen0 var2 len2



set /a needed_spaces=%max_len%-%len1%-%len2%
rem echo %needed_spaces%
set "spaces="
for /l %%a in (1;1;%needed_spaces%) do (
    set "spaces=!spaces! "
)
set line=%var1%%spaces%%var2%


endlocal&if "%~3" neq "" (set %~3=%line%) else echo %line%



exit /b 0
:strlen0  StrVar  [RtnVar]
  setlocal EnableDelayedExpansion
  set "s=#!%~1!"
  set "len=0"
  for %%N in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
    if "!s:~%%N,1!" neq "" (
      set /a "len+=%%N"
      set "s=!s:~%%N!"
    )
  )
  endlocal&if "%~2" neq "" (set %~2=%len%) else echo %len%
exit /b