SET / P用于任何输入(或解决)

时间:2014-11-06 18:42:18

标签: batch-file set

我正在使用脚本启动流媒体所需的各种应用程序,并使用

SET /P $headerTxt="Please enter Stream Header text:"

在测试其他功能时,我使用输入Testign for all并亲自了解代码插入。

整段代码如下,之后不再使用$headerTxt :SetOBSTitleTxt SET /P "$headerTxt"="Please enter Stream Header text:" IF DEFINED %$headerTxt% ( ECHO %$headerTxt%> "%$obsFilePath%%$headerTxtFile%" )

我正在寻找一种方法来捕获字符串的整个输入,其中输入命令的用户不会被解析为命令而是输入到字符串中。我可以告诉用户他们需要为& | < >转义,但我不想限制他们可以使用的字词。

提前感谢您的时间和考虑。

阿什莉

2 个答案:

答案 0 :(得分:3)

使用延迟展开将阻止您尝试避免使用特殊字符的方案。

@echo off
setlocal EnableDelayedExpansion
set /p "$headerTxt=Please enter Stream Header text:"
echo !$headerTxt!
endlocal
exit /b 0

此外,这是一个简单的输入例程,它将持续提示直到输入。

@echo off
setlocal EnableDelayedExpansion
call :Input $headerTxt "Please enter Stream Header text:"
echo !$headerTxt!
endlocal
exit /b 0

:Input <Var> [Prompt]
2>nul set /p "%~1=%~2"
if not defined %~1 = goto Input
exit /b 0

答案 1 :(得分:0)

首先,IF DEFINED %$headerTxt%应为IF DEFINED $headerTxt(无%个字符。)

其次,使用cmd.exe生活中的事实是某些字符以某种方式被解释(例如,>被解释为输出重定向)。

如果您可以使用免费软件下载程序,则可以使用editv32.exe或editv64.exe来读取此输入而不是set /p。它会自动为您插入^转义字符。例如:

editv64 -p "Please enter stream header text:" $headerTxt

您可以从此处下载editv32.exe(32位)和editv64.exe(64位):

http://www.westmesatech.com/editv.html