![](/img/trans.png)
[英]How to pass string with double quotes as command line parameter to a batch file
[英]Double Quotes in batch string redux
我試圖了解^ Caret逃逸如何在Batch CMD中運行。 假設我在CMD窗口中鍵入此行,我希望它將DIR列表發送到“c:\\ my text.txt”
CMD.EXE "/C > ^"c:\my text.txt^" DIR C:\*.*"
相反,我收到錯誤:
'txt.txt" DIR *.*"' is not recognized as an internal or external command,
operable program or batch file.
如果我做一些簡單的事情:
ECHO "^"^""
Expected: """"
Actual : "^"""
即使我嘗試像這樣雙引號:
ECHO " "" "" "
Expected: " " " "
Actual : " "" "" "
有人可以說它是如何工作的,什么是可靠的方法是在命令行中轉義雙引號?
謝謝。
附加示例:
為什么這樣做:
cmd.exe "/C sqlcmd.exe -S.\SQLEXPRESS -E -Q"select suser_name()" > "c:\temp\test 1.txt""
但是這會給出錯誤“系統無法找到指定的路徑”。 並且不會創建txt文件。
cmd.exe "/C "sqlcmd.exe" -S.\SQLEXPRESS -E -Q"select suser_name()" > "c:\temp\test 1.txt""
我知道在這種情況下不需要它,但是如何將命令sqlcmd.exe括在引號中?
我也嘗試從整行中刪除引號,結果相同,即
cmd.exe /C "sqlcmd.exe" -S.\SQLEXPRESS -E -Q"select suser_name()" > "c:\temp\test 1.txt"
再次感謝。
引號是cmd.exe中的狀態機。 第一個引用引用語義,下一個引號將其關閉,下一個引用將等等。
可以轉義引號,使其不會引用引號語義。
例如,以下內容將向test.txt發送引號字符
echo ^" >test.txt
沒有轉義,字符串" >test.txt
只是打印到屏幕上。
不幸的是, 不可能逃避引用語義的引用。
例如,假設您要將字符串"hello world" >"test.txt"
打印到屏幕上。 您嘗試的技術都不起作用,因為內部報價無法轉義。 ^"
形式將^
視為文字,輸出仍將被重定向到文件。 ""
用於正確引用>
,因此沒有重定向,但現在你有兩個引號而不是一個。
你有兩個選擇。
1)逃避所有未引用的“毒葯”字符
echo "hello world" ^>"test.txt"
2)在延遲的擴展變量中隱藏引用文字
我假設此代碼在批處理腳本中。
setlocal enableDelayedExpansion
set "quote=""
echo "hello world!quote! >!quote!test.txt"
請注意,如果處理FOR /F ... IN('command')
或CMD /C
,使用此技術會變得棘手,因為延遲擴展可能會在新的CMD.EXE上下文中關閉。
這是一種執行原始命令的方法
cmd /c dir c:\*.* ^>"c:\my text.txt"
請注意, /c
之后的整個命令字符串不必括在引號內。 在這種情況下,如果不是這樣更容易。
我相信你最后的新命令可以寫成如下:
cmd.exe /C ""sqlcmd.exe" -S.\SQLEXPRESS -E -Q"select suser_name()" > "c:\temp\test 1.txt""
如果在帶括號的塊中使用,則需要轉義右邊的paren。
(
cmd.exe /C ""sqlcmd.exe" -S.\SQLEXPRESS -E -Q"select suser_name(^)" > "c:\temp\test 1.txt""
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.