在批处理中将空格输入 Set / p 命令时遇到问题。这是我的一段代码,它将输入作为命令(基本上是CMD)。
@echo off
:Set
set /p op="C:\Users\Bob\
if %op%==%op% goto Run
:Run
%op%
goto Set
这又是我代码的基本部分,但例如我输入
Net user
它将逃脱并关闭窗口。 Set / P命令有什么问题? TIA
答案 0 :(得分:7)
无。嗯,平衡报价总是一个好主意。
set /p op="C:\Users\Bob\"
这对于缓解问题毫无帮助。
set /p op=C:\Users\Bob\
会做同样的事情。报价不相关
set /p "op=C:\Users\Bob\ "
set /p op="C:\Users\Bob\ "
会在 \
之后显示一个空格第二种语法类似于" safe" set
语法
set "op=C:\Users\Bob\ "
将 = 和" 之间的字符串设置为变量。以这种方式定位引号可确保该行上的尾随空格不包含在分配的值中。
set op=C:\Users\Bob\
set "op=C:\Users\Bob\"
实际上可能做不同的事情。第二个将确保将C:\Users\Bob\
分配给op
。第一个 - 好,op
会获得C:\Users\Bob\
加上行上的任何尾随空格(type
时很方便隐藏
您的问题是,如果您的条目包含空格,
if %op%==%op% goto Run
替换op
的值,然后检查结果的有效语法,以便得到
if Net user==Net user goto Run
这是无效的语法。 if
的语法是
如果 string 运算符 string dothis
所以批处理看到user
它需要一个运算符并显示语法错误。如果您通过双击运行此批处理,则会关闭cmd
实例。这就是首选从提示符运行批处理的原因。
解决方案是`"用双引号括起字符串"``
if "%op%"=="%op%" goto Run
变为
if "Net user"=="Net user" goto Run
因为批处理看到一系列由空格分隔的字符串"作为单引号字符串。
btw - 通常的做法是避免使用关键字标签(如set
)