bat 脚本 参数带等号问题 求解 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
metamask
V2EX    Windows

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

  •  
  •   metamask 2022-07-18 11:23:12 +08:00 2527 次点击
    这是一个创建于 1261 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    metamask
        5
    metamask  
    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"'
    metamask
        7
    metamask  
    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 就知道了。
    metamask
        10
    metamask  
    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 节点的?
    metamask
        13
    metamask  
    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     Solana     1059 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 18:39 PVG 02:39 LAX 10:39 JFK 13:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86