V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
freakxx
V2EX  ›  Windows

bat 脚本 参数带等号问题 求解

  •  
  •   freakxx · 2022-07-18 11:23:12 +08:00 · 1956 次点击
    这是一个创建于 645 天前的主题,其中的信息可能已经有所发展或是发生改变。
    PS C:\Users\x\Desktop> type .\test.bat
    @echo all : %*
    @echo arg1 : %1
    @echo arg2 : %2
    
    
    PS C:\Users\x\Desktop> .\test.bat "aaa=bbb,ccc" "ddd;eee"
    all : aaa=bbb,ccc ddd;eee
    arg1 : aaa
    arg2 : bbb
    

    切到 win 去玩了下脚本,发现参数里带等号也会直接被解析,请问这种情况,怎么直接传进去一个带等号的字符串不被解析

    或者我应该怎么取参数才是正确的

    第 1 条附言  ·  2022-07-18 12:03:10 +08:00
    直接使用#6 的处理方法
    用单引号再包一层进行传递

    > .\xxx.bat '"aaa=bbb,ccc"' '"ddd;eee"'
    14 条回复    2022-07-19 02:02:22 +08:00
    Rache1
        1
    Rache1  
       2022-07-18 11:26:39 +08:00
    未能复现

    Rache1
        2
    Rache1  
       2022-07-18 11:29:12 +08:00
    @Rache1 😲 楼主用的 powershell ,确实有这个问题
    AoEiuV020CN
        3
    AoEiuV020CN  
       2022-07-18 11:31:10 +08:00
    刚知道 powershell 还有这种坑,
    Rache1
        4
    Rache1  
       2022-07-18 11:37:42 +08:00   ❤️ 1
    这样就可以

    start-process "cmd.exe" '/c .\xxx.bat "aaa=bbb,ccc" "ddd;eee"' -Wait -NoNewWindow
    freakxx
        5
    freakxx  
    OP
       2022-07-18 11:40:22 +08:00
    @Rache1 #4

    哈哈哈感觉这样复杂了些,那我可能考虑直接在 cmd 直接执行就算了,就不兜圈了

    不过这个感觉确实有些扯淡。。。包在双引号里还能被解析,这就有些不太合理
    Rache1
        6
    Rache1  
       2022-07-18 11:42:11 +08:00   ❤️ 2
    或者在外面再包一层单引号

    .\xxx.bat '"aaa=bbb,ccc"' '"ddd;eee"'
    freakxx
        7
    freakxx  
    OP
       2022-07-18 11:48:51 +08:00
    @Rache1 #6

    嗯嗯,可以啦,
    我发现好像是我测试漏了
    刚才也尝试用这种方式不让解析,

    感谢 :)
    ysc3839
        8
    ysc3839  
       2022-07-18 11:53:02 +08:00
    这里的问题应该是 PowerShell 把引号当成字符串了,传递给 cmd 的参数中不包含引号,cmd 对包含等号但不含引号的参数又进行了某些处理。

    另外还想吐槽,Windows 启动新进程的命令行参数是只能传递一个字符串的,而 Unix 能传递字符串数组。因此在 Windows 下有的时候传递参数很麻烦,尤其是在不同 shell 中多层传递的情况,你得按照目标程序的解析规则 escape 好,而 Unix 则可以把解析好的字符串数组直接传过去。
    cpstar
        9
    cpstar  
       2022-07-18 11:53:35 +08:00
    powershell 里会各种拆分,不仅仅是等号,还有逗号、分号。你可以试试 arg3\4\5\6 就知道了。
    freakxx
        10
    freakxx  
    OP
       2022-07-18 12:04:29 +08:00
    @ysc3839 #8

    今天在翻有看到一个文档解析怎么解析,没细看;

    哈哈哈,是的,从 shell 切到 bat 来处理,总感觉会比较繁琐了些
    解析规则也相对没那么直观
    abvatous
        12
    abvatous  
       2022-07-18 13:44:47 +08:00
    我歪个楼

    op 你这个帖子为什么打开有背景图的啊?还是说是 windows 节点的?
    freakxx
        13
    freakxx  
    OP
       2022-07-18 14:04:12 +08:00   ❤️ 1
    @abvatous #12

    哈哈哈节点问题
    ipcjs
        14
    ipcjs  
       2022-07-19 02:02:22 +08:00
    Windows 也可以写 sh 脚本呀,为什么要想不开写 bat/powershell😅
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3354 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:53 · PVG 19:53 · LAX 04:53 · JFK 07:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.