我如何打开和关闭回声

how do i turn echo on and off

我正在为 windows 构建虚拟机,但虚拟机是为 ms-dos 构建的。

  1. 我的批处理文件应该能够处理用户输入
  2. 命令提示符应该启动 C: 驱动器而不是 C:/users/YOURNAME
  3. 我不希望它显示该命令

修复 3.) 我尝试关闭回显

我如何解决 1.) 和 2.) 使用宏进行基于用户的输入?

这是我的代码

@echo off
echo This is mosdos virtual machine
cd C:
@echo on

是的,您可以在批处理脚本中使用宏来进行用户输入/输出,只是语法与您预期的不同。

这是一个用于处理用户输入的宏示例:

@Echo off
Setlocal DisableDelayedExpansion

    (Set LF=^


    %= Above Empty lines Required =%)

    Set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"

::: { %@I_O%<[Var Name]>,<[/O Output Var] [/S Set Var]>,<[Prompt for /S Set /P]>
    Set @I_O=For %%n in (1 2) Do if "%%n" == "2" (%\n%
        For /F "Tokens=1,2,3 Delims=," %%G in ("!Param!") Do (%\n%
            IF "%%~H" == "/O" (ECHO/%%G = !%%~G!)%\n%
            IF "%%~H" == "/S" (Set %%~G=)%\n%
            IF "%%~H" == "/S" For /L %%# in (1 1 5) Do If "!%%~G!" == "" (Set /P "%%~G=%%~I ")%\n%
        )%\n%
    ) Else Set Param=,
::: }
    Setlocal EnableDelayedExpansion
:Example
    %@I_O%Name,/S,Enter your Name:
IF /I "!Name!" == "Exit" (Exit /B 0)
    %@I_O%Name,/O
Goto :Example

及其构造方式的解释:

LF 转义字符^ 用于构造/n 换行变量以允许定义多行变量命令。

为了定义宏命令来处理尚未定义的变量,在禁用延迟扩展的环境中定义宏,允许在宏中定义 'Future Variables'。

宏本身通过外部 %%n 循环中的 If / Else 构造使用两个 For 循环的嵌套到 'capture' 参数,内部 For 循环分解那些使用定界字符将参数转换为 tokens - 在本例中为 ,

使用传递给宏的参数执行的逻辑包含在嵌套循环的核心。

在脚本中使用用户输入内容之前,应采取措施验证用户输入 - 在此示例中,使用 for /L 循环对变量定义进行条件检查,以促进变量定义,要求在用户输入之前未定义的变量。

定义宏后,需要启用延迟扩展才能使用它。