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
Rache1 2022-07-18 11:26:39 +08:00
|
3
AoEiuV020CN 2022-07-18 11:31:10 +08:00
|
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 |
5
freakxx OP |
6
Rache1 2022-07-18 11:42:11 +08:00 2
或者在外面再包一层单引号
.\xxx.bat '"aaa=bbb,ccc"' '"ddd;eee"' |
8
ysc3839 2022-07-18 11:53:02 +08:00
这里的问题应该是 PowerShell 把引号当成字符串了,传递给 cmd 的参数中不包含引号,cmd 对包含等号但不含引号的参数又进行了某些处理。
另外还想吐槽,Windows 启动新进程的命令行参数是只能传递一个字符串的,而 Unix 能传递字符串数组。因此在 Windows 下有的时候传递参数很麻烦,尤其是在不同 shell 中多层传递的情况,你得按照目标程序的解析规则 escape 好,而 Unix 则可以把解析好的字符串数组直接传过去。 |
9
cpstar 2022-07-18 11:53:35 +08:00
powershell 里会各种拆分,不仅仅是等号,还有逗号、分号。你可以试试 arg3\4\5\6 就知道了。
|
10
freakxx OP |
11
ColorfulBoar 2022-07-18 12:37:00 +08:00
|
12
abvatous 2022-07-18 13:44:47 +08:00
我歪个楼
op 你这个帖子为什么打开有背景图的啊?还是说是 windows 节点的? |
14
ipcjs 2022-07-19 02:02:22 +08:00
Windows 也可以写 sh 脚本呀,为什么要想不开写 bat/powershell😅
|