我如何打开和关闭回声
how do i turn echo on and off
我正在为 windows 构建虚拟机,但虚拟机是为 ms-dos 构建的。
- 我的批处理文件应该能够处理用户输入
- 命令提示符应该启动
C:
驱动器而不是 C:/users/YOURNAME
- 我不希望它显示该命令
修复 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 循环对变量定义进行条件检查,以促进变量定义,要求在用户输入之前未定义的变量。
定义宏后,需要启用延迟扩展才能使用它。
我正在为 windows 构建虚拟机,但虚拟机是为 ms-dos 构建的。
- 我的批处理文件应该能够处理用户输入
- 命令提示符应该启动
C:
驱动器而不是C:/users/YOURNAME
- 我不希望它显示该命令
修复 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 循环对变量定义进行条件检查,以促进变量定义,要求在用户输入之前未定义的变量。
定义宏后,需要启用延迟扩展才能使用它。