以下是需要优化的问题:
批处理if语句判断变量是否存在,如果存在则删除变量里的双引号
这句脚本为啥会提示 More? 呢?
以下是需要优化的问题:
批处理if语句判断变量是否存在,如果存在则删除变量里的双引号
这句脚本为啥会提示 More? 呢?
参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。
在批处理脚本中,直接删除变量内容中的双引号并不是一件简单的事情,因为批处理并不支持直接对字符串内的特殊字符进行操作。如果尝试用常规方法去检查一个包含双引号的变量并移除双引号时,可能会遇到“More?”提示,这是因为批处理解释器可能无法正确解析命令行。
例如,如果你试图这样做:
set "var=""value"""
if defined var (
rem 尝试删除var中的双引号,但这样写是错误的
set "var=%var:""=%"
) else (
echo 变量未定义
)
上述代码会出错,因为在set
命令里直接去掉双引号会导致语法错误,从而出现“More?”提示,要求你继续输入(因为批处理认为当前行命令没有完整)。
要实现类似功能,需要通过一些间接的方法来达成目的。例如,可以使用延迟扩展(%var:...%=
)结合额外的临时变量来进行替换:
set "var=""value"""
if defined var (
set "temp=!var:""=!"
set "var=%temp%"
rem 现在var中的双引号已经被移除了
echo %var%
) else (
echo 变量未定义
)
这里利用了setlocal EnableDelayedExpansion
开启的延迟环境变量扩展特性,通过!var:""=!
的方式将变量var
中的双引号去除,并赋值给新的临时变量temp
,再将temp
的内容赋回给var
。这样就实现了从变量中删除双引号的效果。不过,请注意,这段代码需要在setlocal EnableDelayedExpansion
启用之后才能正常工作。