如何将字符串置于批处理文件中

时间:2016-01-11 19:48:30

标签: batch-file cmd

我正在进行批量游戏,我希望玩家写下你角色的名字,并且该名称出现在文本框内的屏幕上。像这样:

@echo off
color 0a
setlocal Enabledelayedexpansion 
mode 80,30

set /p nickname=Enter your nickname:
pause
cls
echo.
echo       +------------------+
echo       ¦    %nickname%    ¦  
echo       +------------------+
pause

但由于昵称可以是任意,当昵称的字母数不同于10(变量%昵称%的字母数)时,文本框的右侧栏被推或拉。所以当批处理开始时看起来像这样:

Enter your nickname: Rob
Press any key to continue...


+------------------+
¦    Rob    ¦  
+------------------+
Press any key to continue...

(我用绰号Rob作为例子,可以是任何名字) 那么我怎么修理它?与" |"有关。角色不会改变你的立场?

3 个答案:

答案 0 :(得分:1)

@ECHO Off
SETLOCAL
set /p nickname=Enter your nickname:
echo.
echo       +------------------+
SET "nick=%nickname%"
:loop1
IF DEFINED nick IF "%nick:~17,1%" neq "" GOTO shownick
SET "nick=%nick% "
IF "%nick:~17,1%" neq "" GOTO shownick
SET "nick= %nick%"
GOTO loop1
:shownick
echo       ^|%nick%^|  
echo       +------------------+
GOTO :EOF

将名称复制到另一个变量(nick

如果nick不为空,则如果存在第18个字符,请转到shownick 否则,在nick的末尾附加一个空格 再次测试第18个字符,如果不存在,则在nick前加一个空格并继续,直到字符18存在。

请注意,语法%nick:~17,1%表示the 1`字符从&#34开始;字符18"字符串以"字符0"

开头

答案 1 :(得分:1)

附加一堆空格,然后根据需要为固定字段宽度删除多个字符。我只是将感叹号留在那里作为调试的可视指示器:

set "n=%n%          !"
set n=%n:~0,10%

这是一个包含在脚本中的示例用法。我存储在一个单独的变量中,因为原始值正在被修改,您可能稍后需要它,并且因为如果输入的名称​​更长超过10个字符,那么它将被截断。命名方案有点受COBOL的启发,尽管将长度合并到变量名称可能会变得乏味。

@echo off
set /p nickname=Enter your nickname:
set "zz10=%nickname%          "
set zz10=%zz10:~0,10%

echo       +------------------+
echo       +    %zz10%    +
echo       +------------------+

由于“昵称”这个词加上2%的字符是10个字符宽,我猜这可能是你指定最大宽度为10的原因。虽然这确实使得展示横幅更容易,但显然没有要求。

答案 2 :(得分:0)

Magoo提出的略有不同的变体:

@echo off
color 0a
setlocal Enabledelayedexpansion 
mode 80,30

set /p "nickname=Enter your nickname: "
ECHO %nickname%>x&FOR %%? IN (x) DO SET /A strlength=%%~z? - 2&del x
set "spaces="
for /l %%a in (%strlength%, 1, 13) do set "spaces=!spaces! "
pause
cls
echo.
echo       +------------------+
echo       ^|    %nickname%%spaces%^|
echo       +------------------+
pause