无法在DOS中输入变量

时间:2019-10-31 10:18:13

标签: batch-file environment-variables user-input dos

我正在尝试在vDOS(DOS模拟器)中运行批处理文件,我希望用户输入两个变量。每次运行文件时,它都不允许我输入变量。

SET /P in=Input:
SET /P out=Output:

我希望发生的事情是让我输入变量的输入。 相反,它按原样执行两个命令(不允许我输入输入)。

3 个答案:

答案 0 :(得分:3)

Windows cmd and MS-DOS are very different things,区别之一是set命令。在MS-DOS中,集合的唯一形式是set variable=value。没有set /Aset "variable=value"set /P

set /P是Windows NT的cmd.exe的功能。在DOS中,您必须使用3 rd 方软件来获取用户输入并将其存储在变量中。这是一些解决方案

  • SENVAR.COM

    SENVAR INPUT Input string:
    
  • EDITVAR and CHOOSE

    editvar -p "Input string: " INPUT
    
  • FC.COM

    @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
    
  • ANSI.SYS

    @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
    

    ←是escape character (27h)

如果您只想获得简单的答案,例如Y / N,那么CHOICE.COM就是为此目的而设计的

另请参见

答案 1 :(得分:1)

Firefox直到Windows 2000或NT才被引入。旧版MS-DOS或等效版本将没有它。 https://www.computerhope.com/sethlp.htm

答案 2 :(得分:0)

CMD和DOS非常不同。诸如command.com之类的DOS解释器无法使用set / a或set / p设置变量。但是,您可以尝试以下方法:

@echo off
echo Input:
for %%a in ('type con') do echo %%a >tmpinput.txt & goto next
:next
echo Output:
for %%b in ('type con') do echo %%b >tmpoutput.txt & goto next2
:next
set in=<tmpinput.txt
set out=<tmpoutput.txt
del tempinput.txt
del tmpoutput.txt

它将在command.com中真正起作用。它也可以在cmd中工作,但是我不建议在那儿使用。

编辑:

使用标签的另一种方法:

FOR /F "tokens=5* delims= " %%A IN ('VOL C: ^| FIND "drive C"') DO SET OLDLABEL=%%B
ECHO Enter some input string, containing no more than 32 characters:
FOR /F "TOKENS=*" %%? IN ('LABEL C: 2^>NUL') DO SET INPUT=%%?
ECHO %INPUT%
LABEL C: %OLDLABEL% >NUL 2>&1