如何打开和关闭回声[关闭]

问题描述 投票:-1回答:1

我正在为windows建立一个虚拟机,但vm是ms-dos的,我知道msdos基本上是一个批处理文件,所以我试着做它,接受一件事,我想让它接受用户输入,但为了使它更像原始的,我开始在C:驱动器,而不是C:用户你的名字,但我不希望它显示该命令,不,我不是一个批处理文件编码谁包含任何其他语言的知识,我知道C++,javascript,html,css等。我只是在用批处理来做我的vm,我试着把echo关闭,所以我去了我的pal stack overflow和macros!我不能用宏来做基于用户的输入!任何关于我的ms-do的knolodge都会被感激。

@echo off
echo This is mosdos virtual machine, i know batch = yucky but MSDOS operated in batch so in order to replicate the experiance i created a batch file
cd C:
@echo on
batch-file virtual-machine
1个回答
0
投票

是的,你可以在批处理脚本中使用宏来输出用户输入,只是语法与你所期望的不同。

这里是一个处理用户输入的宏的例子。

@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 新行变量,允许定义多行变量命令。

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

宏本身使用两个嵌套 For 循环,通过外层的If Else结构 "捕获 "参数。%%n 循环,内部的For循环将这些参数分解为 tokens 使用分隔符 , 在这个例子中,要用传递给宏的参数颁布的逻辑是包含在嵌套循环的中心。

嵌套循环的核心部分包含了要用传递给宏的参数来执行的逻辑。

在脚本中使用它们的内容之前,应该采取步骤来验证用户的输入--在这个例子中,A for L循环与一个关于变量定义的条件检查已经被用来促进变量的定义,要求变量在用户输入之前是未定义的。

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

© www.soinside.com 2019 - 2024. All rights reserved.