簡體   English   中英

批量字符串redux中的雙引號

[英]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.

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