首页 > 解决方案 > 如何打开和关闭回声

问题描述

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

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

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

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

这是我的代码

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

标签: batch-filevirtual-machine

解决方案


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

以下是处理用户输入的宏示例:

@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 转义字符^用于构造/nNewline 变量以允许定义多行变量命令。

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

宏本身使用两个For循环的嵌套来通过外部循环中的 If / Else 构造“捕获”参数%%n,并且内部 For 循环将这些参数分解为tokens使用定界符 -,在本例中。

与传递给宏的参数一起执行的逻辑包含在嵌套循环的中心。

在脚本中使用其内容之前,应采取步骤验证用户输入 - 在此示例中,已使用带有关于变量定义的条件检查的 for /L 循环来促进变量的定义,要求变量未定义在用户输入之前。

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


推荐阅读