批量重新调整字符串大小

时间:2014-01-02 05:08:00

标签: batch-file console cmd

我正在尝试重新调整文字大小

示例:

set item1=hello world
set item2=test
set item3=F

在设置了所有项目变量之后,它将被重新调整为最大8个字母,因此它们在完成后看起来像这样:

"hello .."
"test    "
"f       "

我希望它看起来如何:

echo %item1%
hello world

echo %item1a%
"hello .."

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
:: list of variables to play with (just for convenience)
SET list=item1 item2 item3
:: Initialise items
set item1=hello world
set item2=test
set item3=F

:: Pad to 8 chars
ECHO Before...
FOR %%i IN (%list%) DO CALL ECHO(+%%%%i%%+
FOR %%i IN (%list%) DO CALL SET "%%i=%%%%i%%        "&CALL SET "%%i=%%%%i:~0,8%%"
ECHO After....
FOR %%i IN (%list%) DO CALL ECHO(+%%%%i%%+

:: Re-initialise items
set item1=hello world
set item2=test
set item3=F
:: Pad to 8 chars. Dots in last 2 chars if truncated
ECHO Before...
FOR %%i IN (%list%) DO CALL ECHO(+%%%%i%%+
FOR %%i IN (%list%) DO (
 CALL SET "truncated=%%%%i:~8%%"
 IF DEFINED truncated (
  CALL SET "%%i=%%%%i:~0,6%%.."
 ) ELSE (
  CALL SET "%%i=%%%%i%%        "&CALL SET "%%i=%%%%i:~0,8%%"
 )
)
ECHO After....
FOR %%i IN (%list%) DO CALL ECHO(+%%%%i%%+

GOTO :EOF

足够简单。

结果:

Before...
+hello world+
+test+
+F+
After....
+hello wo+
+test    +
+F       +
Before...
+hello world+
+test+
+F+
After....
+hello ..+
+test    +
+F       +

CALL(我会在其中放置一些空格以显示它是如何解释的)

SET "%%i = %% %%i %% [some spaces]"
对于(列表)中的%% i,

将执行,例如:item2

CALL SET "item2=%%item2%%       "

由于这是CALL,因此它被执行为

SET "item2=%item2%        "

所以在右侧填充项目2,有8个空格。

同样,`CALL SET“%% i = %%%% i:~0,8 %%”被解释为

CALL SET "item2=%%item2:~0,8%%"

并执行

SET "item2=%item2:~0,8%"

将结果的前8个字符分配给变量。

与第二个例程的唯一区别在于它类似地将truncated设置为变量值的一部分减去前8个字符。因此,它将具有值,或者,如果变量是8个或更少的字符,则没有值。因此,它将被定义或不定义。如果是,则将变量设置为前6个字符+ ..如果不是,则按原样填充到8。

显示屏的+两端都显示值的开头和结尾。终端空间有点难以看到......