Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 不同的空间数取决于变量_Variables_Batch File_Space - Fatal编程技术网

Variables 不同的空间数取决于变量

Variables 不同的空间数取决于变量,variables,batch-file,space,Variables,Batch File,Space,我正在尝试创建一种类似以下内容的列表: echo thing1 thing2 echo. echo %var% %var1% echo %var% %var1% rem and so on 然后使用for循环列出目录中的文本文件和如下信息: echo thing1 thing2 echo. echo %var% %var1% echo %var% %var1% rem and

我正在尝试创建一种类似以下内容的列表:

echo thing1          thing2
echo.
echo %var%           %var1%
echo %var%           %var1%
rem and so on
然后使用for循环列出目录中的文本文件和如下信息:

echo thing1          thing2
echo.
echo %var%           %var1%
echo %var%           %var1%
rem and so on
但是,不管变量的长度是多少,总有11个空格,这会使它与头稍有偏差

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


但我只是想知道是否还有其他更简单的方法。

这里没有提到字符串是如何精确提取的,所以我将把这个留给您。 下面是如何在两个变量之间设置空格,结果将具有固定长度

@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

这取决于要创建的列表文件:稍后在文本编辑器中打开的带有固定列的文本文件*.txt,或稍后在电子表格应用程序中打开的文件*.csv。