簡體   English   中英

在Windows命令行上轉義字符串

[英]escaping string on Windows command line

我正在嘗試從命令行將字符串傳遞給Win32程序,因此它將在不更改的情況下打印。

為什么我要逃避
“AAA <BBB@pobox.com>”“”“AAA <BBB@pobox.com>”“”

“AAA <BBB@pobox.com>”, (逗號包括)為“\\”AAA ^ <BBB@pobox.com ^> \\“,”

我發現Windows命令行的轉義規則沒有一致性

PS我正在嘗試生成.cmd文件

更新:

我正在使用簡單的C程序進行測試,使用gcc編譯,沒有其他對象文件鏈接。 如果我用perl替換它,規則保持不變。

我正在嘗試創建一個通用的轉義算法。 它將生成.cmd文件,該文件將使用輸出重定向調用perl。 目前我有一個問題,如果字符串包含使用反斜杠轉義的奇數雙引號,則輸出重定向不起作用。 http://blogs.msdn.com/b/oldnewthing/archive/2010/09/17/10063629.aspx的最新評論中描述了同樣的問題。

如果我使用“”作為“它的轉義”,它會在空格上分割,因此它將導致2個參數而不是一個。此外,“”還有一些工件。

在Windows中,沒有一種方法可以獲取命令行並解析它。 一般來說,程序通常都是自己處理的。

最近Raymond Chen發表了一篇關於CommandLineToArgvW函數的文章,其中提到了有關引用的各種規則,但它們僅在程序使用該特定函數時才適用。 http://blogs.msdn.com/b/oldnewthing/archive/2010/09/17/10063629.aspx

在Windows中,命令行被無故障地傳遞給程序(即沒有擴展通配符),然后程序需要處理它。 編程語言可以提供一些方便,可以進行一些默認的參數解析,這可能會使用像CommandLineToArgvW這樣的標准Windows函數,但即使如此,程序也可以選擇讀取未摻雜的字符串本身,從而跳過這些標准。

這意味着您需要找出自己嘗試編寫腳本的特定程序的規則,然后再使用它們。

我剛剛嘗試將這些參數作為我自己的程序中的一個,並且兩個版本(帶或不帶逗號)都可以通過兩種方式進行轉義(使用"""\\"來轉義引號)。 我可以看到<>需要在第二個版本中使用^進行轉義的唯一原因是,由於轉發方式不同,命令行在將它們傳遞給應用程序之前將其視為I / O重定向字符串引號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM