gpt4 book ai didi

batch-file - SET/p 不是集中在 Batch 中。空格问题

转载 作者:行者123 更新时间:2023-12-01 01:16:24 25 4
gpt4 key购买 nike

这是我的 TXT:

echo         x  1.   Enter               x  
echo x 2. Leave x
echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
echo:

set /p Menu= Enter number {1,2}:

if not '%Menu%'=='' set Menu=%Menu:~0,1%
if '%Menu%'=='1' goto ConvM

我的 txt 在家里被转换为 *.bat,当批处理运行时,短语“输入数字 {1,2}:”的中心部分正好位于分隔符“x”的中间。结果如下图:
     x  1.   Enter               x  
x 2. Leave x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Enter number {1,2}:

我的 txt 在我工作的公司被转换为 *.bat ,当批处理运行时,它显示一些偏移量,如下所示:
     x  1.   Enter               x  
x 2. Leave x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Enter number {1,2}:

我也将我的 txt 转换为 CMD 但结果是一样的。在家里我有 Windows XP,在工作中我有 Windows 7。
我应该怎么做才能在任何计算机中将“输入数字 {1,2}:”与“x”集中在一起?

最佳答案

不幸的是,Windows 7(我认为 Vista 也是如此)忽略了 SET /P 中的前导空格。迅速的。空白字符包括空格、制表符和不间断空格 (0xFF)。

该解决方案并不直观,但很简单。只需在提示前加上退格 (0x08) 字符即可。下面的代码以编程方式定义了一个包含退格字符的变量。然后很容易根据需要将它包含在任何提示中。

@echo off
setlocal

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

echo x 1. Enter x
echo x 2. Leave x
echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
echo:

set /p Menu=%BS% Enter number {1,2}:

通常退格会导致行光标后退一个位置,然后下一个字符将覆盖那里的内容。但由于提示总是从第一个位置开始,因此没有空间备份。退格键有效地不接受允许在提示中引导空格:-)

如果需要,您可以在退格符前面放置另一个字符,但这不是必需的。退格键会将行光标后退一个位置,然后您想要的提示将覆盖不需要的字符。
set /p Menu=x%BS%               Enter number {1,2}:

编辑 - 这是 FOR /F 的解释定义 BS 变量的行
PROMPT命令控制当 ECHO 为 ON 时显示为每行输出前缀的文本。默认情况下,它是当前目录,后跟 >特点。

使用 PROMPT $H导致提示为 <backspace><space><backspace> .所以像 REM 这样的命令将导致 <backspace><space><backspace>REM 的输出.

在执行的一行上有一串命令。通常,如果命令出现在发出 ECHO ON 的同一行上,则它们不会被回显。该规则的异常(exception)是作为 FOR DO 子句的一部分出现的任何命令都会被回显。这就是 REM 命令在 FOR 循环中“执行”的原因——所以我们得到 REM 命令的输出。

整个命令字符串在外部 FOR /F 内执行环形。该字符串用单引号括起来告诉 FOR /F执行命令。在单引号内,字符串用双引号括起来。双引号保护命令连接 &运算符(operator)。通常,一串命令不能用双引号括起来。但它在这种情况下有效,因为 FOR /F作品。命令通过 CMD /C "command string" 隐式执行.所以在这种情况下使用双引号是完全可以接受的。

如果不使用双引号,则 &字符必须用 ^ 转义:
('prompt $H ^& echo on ^& for %%B in (1) do rem')

最后,由于默认 FOR /F DELIMS<tab><space> ,REM 命令的输出将被解析为 token ,并且只保留第一个 token 。最终结果是由单个 <backspace> 组成的 BS 值特点。

关于batch-file - SET/p 不是集中在 Batch 中。空格问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11830742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com