在批处理中,如何在输入提示字符串的开头创建空格?

Mar*_*kum 13 cmd batch-file

假设我有一个批处理文件,其中包含"填充",我想缩进提示字符串的开头以供用户输入.如果我使用空格,它将在运行时不显示,它只是忽略了空间.这个脚本举个例子:

@echo off

echo.
echo.
echo    Hi.
echo    Please input something.
echo.
set /P input=   
Run Code Online (Sandbox Code Playgroud)

=有三个空格之后,我期望输入的标记远离命令框的边缘,但是忽略这些空格.

我该如何解决这个问题?我使用的是Windows 7 SP1.

小智 19

您需要在echo之后添加一个点以下示例将输出带有三个前导空格的"Test":

echo.   Test
Run Code Online (Sandbox Code Playgroud)

制表师的工作方式相同.以下示例将使用一个前导选项卡输出"Test":

echo.   Test
Run Code Online (Sandbox Code Playgroud)


dbe*_*ham 10

正如上面的评论所述,Vista和更高版本在SET/P提示符中删除前导空格.

解决问题的方法是在提示符中定义和使用退格字符.

::define a variable containing a single backspace character
for /f %%A in ('"prompt $H &echo on &for %%B in (1) do rem"') do set BS=%%A

set /p var=%BS%   Leading spaces will not show properly.
Run Code Online (Sandbox Code Playgroud)

通常提示符将出现在一行的开头,因此上述工作正常.

但是如果提示是从一行中间发出的(非常不寻常),那么应该在前面加一个前导字符<BS>,因为退格会擦除之前的任何内容.

<nul set/p=Leave the cursor at the end of this line:
set /p var=.%BS%   The dot (any char) is necessary to prevent the <BS> from erasing the :
Run Code Online (Sandbox Code Playgroud)


Hel*_*ães 5

在dbenham的答案中受到高度启发,我提出了一个类似但更简单的变体,因为退格字符可以以原始形式插入(仅在批处理文件中,直接在控制台中尝试此操作将无法按预期工作):

set /p var=.'BS' Leading spaces will now show properly.

可以通过键入Alt + Numpad 008来插入'BS'字符(8是退格的ASCII代码,使用通常在字母上方找到的字母数字键无法工作),使用优秀的文本编辑器(例如Notepad ++,Windows Notepad只执行退格行动).

如果无法插入字符,记事本++有这个非常有用的功能:在 TextFX菜单,选择TextFX工具,然后插入ASCII图表或字符: 插入Ascii图表或字符 所需的字符是第BS9行中的(屏幕截图中黑色背景上的白色字母)(ASCII字符8- 如上所述 - 因为它是零索引表).

如果结果仍然不是所描述的结果,请尝试将文件编码更改为ASCII.使用Notepad ++:

  1. 制作脚本的备份副本或在单独的文件中执行实验,因为在此转换中会丢失非ASCII字符(重音字符,非拉丁字符等).
  2. 在" 编码"菜单中,选择" 转换为ANSI"
  3. 保存并再次检查结果......

使用Windows 7 Professional SP1进行测试.

积分还包括: