batch-file - 如何打开和关闭回声
问题描述
我正在为 windows 构建一个虚拟机,但 vm 是为 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
Newline 变量以允许定义多行变量命令。
为了定义宏命令以处理尚未定义的变量,宏在禁用延迟扩展的环境中定义,允许在宏中定义“未来变量”。
宏本身使用两个For
循环的嵌套来通过外部循环中的 If / Else 构造“捕获”参数%%n
,并且内部 For 循环将这些参数分解为tokens
使用定界符 -,
在本例中。
与传递给宏的参数一起执行的逻辑包含在嵌套循环的中心。
在脚本中使用其内容之前,应采取步骤验证用户输入 - 在此示例中,已使用带有关于变量定义的条件检查的 for /L 循环来促进变量的定义,要求变量未定义在用户输入之前。
定义宏后,需要启用延迟扩展才能使用它。
推荐阅读
- java - 从输入数据构建树
- java - 如何在onDatachaned中添加arraylist并返回android
- c# - 使用 JsonSerializer 反序列化带有数字作为字段的 JSON
- css - 绝对位置底部:0 在 IE 中无法按预期工作
- reactjs - 在reactjs中使用坐标系移动一个正方形
- design-patterns - 在 Apex 中比较两个没有双循环的不同 sObject 列表
- wac - 如何在 Windows Admin Center 的自定义扩展中获取登录用户名
- database - AWS Neptune DB 与实体沿袭的 Dynamo DB
- javascript - 如何将自定义内容转换为 webpack 中的 javascript 模块?
- php - 将 WordPress 定制器样式应用于古腾堡编辑器