我正在尝试重新调整文字大小
示例:
set item1=hello world
set item2=test
set item3=F
在设置了所有项目变量之后,它将被重新调整为最大8个字母,因此它们在完成后看起来像这样:
"hello .."
"test "
"f "
我希望它看起来如何:
echo %item1%
hello world
echo %item1a%
"hello .."
答案 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。
显示屏的+
两端都显示值的开头和结尾。终端空间有点难以看到......