当前位置:  开发笔记 > 编程语言 > 正文

批处理:在Set/p输入中使用Spaces的奇数问题

如何解决《批处理:在Set/p输入中使用Spaces的奇数问题》经验,为你挑选了1个好方法。

在批处理中将空格输入到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



1> Magoo..:

没有.嗯,平衡报价总是一个好主意.

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\ 加上线上的任何尾随空格(typed 时方便不可见)

你的问题是,如果你的条目包含空格,

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)

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有