在批处理中将空格输入到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
没有.嗯,平衡报价总是一个好主意.
set /p op="C:\Users\Bob\"
这对于缓解问题毫无帮助.
set /p op=C:\Users\Bob\
会做同样的事情.报价不相关
set /p "op=C:\Users\Bob\ " set /p op="C:\Users\Bob\ "
之后会显示一个空格 \
第二种语法类似于"安全" 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
d 时方便不可见)
你的问题是,如果你的条目包含空格,
if %op%==%op% goto Run
替换值op
,然后检查结果是否有效语法,所以得到
if Net user==Net user goto Run
这是无效的语法.语法if
是
if string运算符字符串 dothis
批处理可以看到user
它对运算符的期望并显示语法错误.如果您通过双击运行此批处理,则它将关闭该cmd
实例.这就是首选从提示符运行批处理的原因.
解决方案是"将字符串括在双引号中"``
if "%op%"=="%op%" goto Run
变
if "Net user"=="Net user" goto Run
因为批处理看到"由空格分隔的一系列字符串"作为单引号字符串.
顺便说一句 - 通常的做法是避免使用关键字标签(如set
)