DOS下不能输入变量

Posted

技术标签:

【中文标题】DOS下不能输入变量【英文标题】:Can't enter a variable in DOS 【发布时间】:2020-02-26 16:22:10 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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 就是为此目的而设计的

另见

MS-DOS 6.22 Batch File User Input to Environment Variable Prompt for variable in DOS 7.1

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于DOS下不能输入变量的主要内容,如果未能解决你的问题,请参考以下文章

windows下上传shell脚本不能运行—将dos模式修改为unix 文件格式

DOS命令下输入:java Hello 出现以下几种结果可能的原因:

Dos下不能运行程序??!!!

在DOS命令中输入ipconfig /all,出现“该命令不是系统内部命令......”

配置好环境变量后,在dos系统中输入javac测试,为什么信息都是一堆问号???

dos下 输入telnet指令,为何提示:不是内部或外部命令,也不是可运行的程序