我正在使用脚本启动流媒体所需的各种应用程序,并使用
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%"
)
我正在寻找一种方法来捕获字符串的整个输入,其中输入命令的用户不会被解析为命令而是输入到字符串中。我可以告诉用户他们需要为& | < >
转义,但我不想限制他们可以使用的字词。
提前感谢您的时间和考虑。
阿什莉
答案 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位):