问题描述
我正在尝试在vDOS(DOS模拟器)中运行批处理文件,我希望用户在其中输入两个变量.每次运行文件时,它都不允许我输入变量.
I'm trying to run a batch file in vDOS (DOS emulator), where I want the user to input two variables. Every time I run the file, it doesn't let me enter the variables.
SET /P in=Input:
SET /P out=Output:
我期望发生的事情是让我输入变量的输入.相反,它按原样执行这两个命令(不允许我输入输入).
What I expected to happen was that It'd let me enter the input for the variables. Instead, it executes both of the commands as they are (without letting me enter the input).
推荐答案
Windows cmd和MS-DOS完全不同,不同之处之一是set
命令.在MS-DOS中,设置的唯一形式是set variable=value
.没有set /A
,set "variable=value"
和set /P
.
Windows cmd and MS-DOS are very different things and one of the differences is the set
command. In MS-DOS the only form of set is set variable=value
. There are neither set /A
, set "variable=value"
nor set /P
.
set /P
是Windows NT的cmd.exe的功能.在DOS中,您必须使用3 方软件来获取用户输入并将其存储在变量中.这是一些解决方案
set /P
is a feature of Windows NT's cmd.exe. In DOS you must use 3 party software to get user input and store in a variable. Here are some solutions
SENVAR INPUT Input string:
EDITVAR
and CHOOSE
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
如果您只想获得简单的答案,例如Y/N,则CHOICE.COM
是为此目的而设计的
In case you just want to get simple answers like Y/N then CHOICE.COM
is designed for that purpose
另请参见
- MS-DOS 6.22 Batch File User Input to Environment Variable
- Prompt for variable in DOS 7.1
这篇关于无法在DOS中输入变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!