【问题标题】: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 个空格,这会使它与标题有点距离。

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

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

【问题讨论】:

  • 嗯,这取决于要创建哪个列表文件:稍后在文本编辑器中打开的带有固定列的文本文件 (*.txt) 或稍后打开的 comma-separated values 文件 (*.csv)一个电子表格应用程序。

标签: 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多