batch-file - DOS下不能输入变量
问题描述
我正在尝试在 vDOS(DOS 模拟器)中运行一个批处理文件,我希望用户在其中输入两个变量。每次我运行文件时,它都不允许我输入变量。
SET /P in=Input:
SET /P out=Output:
我期望发生的是它让我输入变量的输入。相反,它按原样执行这两个命令(不让我输入输入)。
解决方案
Windows cmd 和 MS-DOS 是非常不同的东西,其中一个区别是set
命令。在 MS-DOS 中,集合的唯一形式是set variable=value
. 既没有set /A
,set "variable=value"
也没有set /P
。
set /P
是 Windows NT 的 cmd.exe 的一个功能。在 DOS 中,您必须使用 3 rd方软件来获取用户输入并存储在变量中。这里有一些解决方案
-
SENVAR INPUT Input string:
-
editvar -p "Input string: " INPUT
-
@echo off :: based on batch from PC Magazine June 27, 1995 page 248 :: this version puts temps in C:\DOS dir and shortens var names :: User input is returned in variable STR :input > C:\DOS\en#er.bat fc con nul /lb1 /n|date|find " 1: " > C:\DOS\enter.bat echo set str= >>C:\DOS\enter.bat echo :loop >>C:\DOS\enter.bat echo if not '%%str%%==' set str=%%str%% %%5 >>C:\DOS\enter.bat echo if '%%str%%==' set str=%%5 >>C:\DOS\enter.bat echo shift >>C:\DOS\enter.bat echo if not '%%5==' goto loop call en#er.bat del C:\DOS\enter.bat del C:\DOS\en#er.bat
-
@ECHO OFF REM * Ask for USeR INPUT and store it in variable USRINPUT REM * Assumes ANSI.SYS is loaded REM * Written by Rob van der Woude SET USRINPUT= REM * Turn on ANSI key translation (translate Enter REM * key to F6+Enter sequence) and ask for input: ECHO ←[13;0;64;13pEnter one word only . . . REM * Copy entered text to temporary file: COPY CON %TEMP%.\~USRINP.TMP REM * Turn off ANSI key translation and clear irrelevant screen output: ECHO ←[13;13p←[3A←[K←[1B←[K←[1B←[K←[2A REM * Add empty line to temporary file. The empty line REM * will be used to stop DATE asking for new date. ECHO.>> %TEMP%.\~USRINP.TMP ECHO.>> %TEMP%.\~USRINP.TMP REM * Create a temporary batch file that will store the REM * entered text into the environment variable USRINPUT: TYPE %TEMP%.\~USRINP.TMP | DATE | FIND "):" > %TEMP%.\~USRINP.BAT REM * Create more temporary batch files. Add REM * more command line parameters if necessary, REM * as in: ECHO SET USRINPUT=%%3 %%4 %%5 %%6 %%7 %%8 %%9>CURRENT.BAT ECHO SET USRINPUT=%%3>CURRENT.BAT REM * VOER.BAT and TYP.BAT are replacements for CURRENT.BAT for Dutch REM * DOS versions; add your own language versions if necessary: ECHO SET USRINPUT=%%6>VOER.BAT ECHO SET USRINPUT=%%4>TYP.BAT REM * This temporary batch file now sets the variable USRINPUT: CALL %TEMP%.\~USRINP.BAT REM * Display the result: ECHO You typed: ←[1m%USRINPUT%←[0m ECHO. PAUSE REM * Finally, clean up the mess of temporary files: FOR %%A IN (%TEMP%.\~USRINP.BAT %TEMP%.\~USRINP.TMP VOER.BAT TYP.BAT CURRENT.BAT) DO DEL %%A
← 是转义字符 (27h)
如果您只想获得像 Y/N 这样的简单答案,那么CHOICE.COM
就是为此目的而设计的
也可以看看
推荐阅读
- c++ - C++:我的简单计算器程序不会打印出来。我也认为我的变量命名不正确
- php - 无法通过 ajax 请求传递变量
- python - 如何为特定类型添加检查
- c# - C# 注册表写入不再有效
- angular - Angular angulartics2(谷歌分析)不会更新路线更改页面
- javascript - 如何使用 javascript 获取通过 SAM 创建的 AWS API 网关的端点
- bootstrap-4 - 是否可以使用一个徽标制作 2 个导航栏并在两个栏上左右对齐?
- sql-server - 春季启动时SQL Sever初始加载失败
- flask-session - 有人可以告诉我为什么会话不起作用
- java - 如何在 Java 中淡化 .wav 文件?