2013年12月8日 星期日

[mosquitto]在 windows command 下,要傳送雙引號。

這應該算是 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) 一樣,是用雙引號來跳脫。我還試了很久的反斜線…,兩邊沒有要統一一下嗎?

沒有留言:

張貼留言