【问题标题】:Different Number of Spaces Depending on the Variable不同数量的空间取决于变量
【发布时间】:2015-03-23 09:27:31
【问题描述】:
我正在尝试创建一个类似这样的列表:
echo thing1 thing2
echo.
然后是一个 for 循环来列出目录中的文本文件和一些类似这样的信息:
echo %var% %var1%
echo %var% %var1%
rem and so on
但是无论变量的长度是多少,总会有 11 个空格,这会使它与标题有点距离。
我知道我可以编写一些代码来检测长度并在变量中保存一些空格,然后添加它。
但我只是想知道是否还有另一种更简单的方法。
【问题讨论】:
标签:
variables
batch-file
space
【解决方案1】:
没有提到这些字符串是如何被提取的,所以我把这个留给你。
这是您如何在两个变量之间设置空格并且结果将具有固定长度的方法。
@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