這應該算是 windows command prompt 的小技巧,只是我到現在要用 mosquitto 的 mosquitto_pub.exe 才遇到。要把雙引號送進批次檔或是執行檔送出雙引號,其跳脫符號就是雙引號。
因為每次執行 mosquitto_pub.exe 都要到安裝的目錄下,而且,topic 跟 host 每次都要手打,很想偷懶。
於是在順手的地方,例如 C:\User\user,放了一個叫做 send.bat 的批次檔。內容如下:
"C:\Program Files (x86)\mosquitto\mosquitto_pub.exe" -t test -h 192.168.1.111 -m %1
然後,只要我在 C:\User\user 底下執行
send test
就會得到
test
若是執行
send test test
卻只會得到
send test
若要得到 test test,就要執行
send "test test"
接下來,我想要送一個 json 物件,{"id":"ricky","msg":"hello world!"},若直接執行
send {"id":"ricky","msg":"hello world!"}
,會變成
{id:ricky
我們看一下實際執行的指令是:
C:\User\user>"C:\Program Files (x86)\mosquitto\mosquitto_pub.exe" -t test -h 192.168.1.111 -m {"id":"ricky"
原因是,參數有先傳進批次檔,雙引號算是控制符號之一,真的送出去的字串裡,雙引號都被拿掉了。
所以不論是執行檔或是批次檔,要傳送 json 這種東西,雙引號的部份要用雙引號跳脫,所以就長成這樣:
send.bat "{""id"":""ricky"",""msg"":""this is test""}"
跟 Visual Basic (VB) 一樣,是用雙引號來跳脫。我還試了很久的反斜線…,兩邊沒有要統一一下嗎?
沒有留言:
張貼留言