CSDN-Ada助手 2024-02-11 18:45 采纳率: 1.6%
浏览 5

批处理if语句判断变量是否存在,如果存在则删除变量里的双引号

该问题来自社区帖: https://bbs.csdn.net/topics/618071222.为符合问答规范, 该问题经过ChatGPT优化

以下是需要优化的问题:

批处理if语句判断变量是否存在,如果存在则删除变量里的双引号

这句脚本为啥会提示 More? 呢?

  • 写回答

3条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-11 18:48
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    在批处理脚本中,直接删除变量内容中的双引号并不是一件简单的事情,因为批处理并不支持直接对字符串内的特殊字符进行操作。如果尝试用常规方法去检查一个包含双引号的变量并移除双引号时,可能会遇到“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启用之后才能正常工作。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月11日

悬赏问题

  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数