我正在进行批量游戏,我希望玩家写下你角色的名字,并且该名称出现在文本框内的屏幕上。像这样:
@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作为例子,可以是任何名字) 那么我怎么修理它?与" |"有关。角色不会改变你的立场?
答案 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