【问题标题】:How do I add a space on this line?如何在此行上添加空格?
【发布时间】:2020-08-13 07:51:21
【问题描述】:

我正在制作域解析器,但我不喜欢文本位于窗口边框的方式。该行是set /p domainname=Enter Domain Name^> %ESC%[92m

我想在 Enter Domain Name> 之前添加一个空格

这就是它的样子

所以它不会正好贴在窗口边框上,这会使它看起来更好一些。我该怎么办?我还没有找到有关如何解决此问题的任何信息。

【问题讨论】:

  • SET /P 去除前导空格,但这应该可以:2>nul <nul choice /n /m ""&set/pdomainname="Enter Domain Name > %ESC%[92m"

标签: batch-file cmd command-prompt


【解决方案1】:

作为替代方案,您可以使用 prompt 技术来显示任何文本消息(最长 511 个字符),而不必担心前导空白字符。

它的工作原理如下:

set "prompt=Your text message"
cmd /d /k <nul
set /p "myVar="

将其放入可重用函数中:

@echo off
setlocal EnableExtensions

call :getInput domainname " Enter Domain Name > %ESC%[92m"

echo domainname is [%domainname%]
pause
exit /b

:getInput <inputVar> ["Message String"]
setlocal DisableDelayedExpansion
set "Msg=%~2"
if defined Msg (
    REM For prompt strings, $ is an escape character so it should be escaped with another one.
    set "prompt=%Msg:$=$$%"
    "%COMSPEC%" /d /k <nul
)
endlocal
set /p "%~1="
exit /b

【讨论】:

    【解决方案2】:

    set /p 去除提示字符串开头的所有空白字符,因此即使提示字符串被引用,它仍然不起作用。诀窍是写一些非空白字符然后overwrite it with CR

    @echo off
    
    setlocal EnableExtensions EnableDelayedExpansion
    
    rem Get CR character
    for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
    
    set /p "domainname=x!CR! Enter Domain Name > %ESC%[92m"
    echo %domainname%
    

    【讨论】:

    • 我很困惑我会把它放在哪里以及我会使用它的哪些部分(编辑:我已经让它工作了,但它弄乱了出现在后记的 ascii 艺术
    • 当然你把它放在你想要获取用户输入的批处理文件中。 echo offsetlocal 和 get CR 应该在开头设置一次
    • @miluuu ! 因为delayedexpansion 而被剥夺,你应该用^^! 转义它,但这完全超出了你的问题范围。
    • 是的,一旦启用了 DelayedExpansion ! 就会变成一个特殊字符,所以如果在引号之外你需要转义它
    • @miluuu 您可以通过选择答案旁边的灰色勾号来选择他的正确答案来感谢用户。至于关于颜色的问题的另一部分。您可以提出一个新问题并将您的整个代码放在那里,我们可以提供帮助。但是here is an answer我提供了类似的东西。
    猜你喜欢
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 2020-12-08
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多