[英]Differences between single and double quotes in CMD
我有一個 powershell 文件,它替換了配置文件中的 IP。 powershell 接受三個參數:
'C:\Program Files (x86)\app\app.conf'
)由於我們的服務依賴於使用批處理文件來處理任務,因此我編寫了一個批處理腳本,它只需要三個參數並將其發布到 powershell 腳本。
我們使用批處理文件來調用和解析參數: ($只是用來表示變量)
changeip.bat '$filepath' $oldip $newip
這失敗了,但我不明白為什么。 我嘗試在$filepath
周圍使用雙引號而不是單引號並且它有效。
$filepath
中的空格如何用雙引號而不是單引號來理解?
簡短的回答是CMD 不會將單引號視為常規字符。 它不是像雙引號那樣的一對/組。
單引號具有任何特殊含義的唯一位置是在FOR /F
循環中,您在其中指定要運行和迭代 output 的命令。
FOR /F %%d IN ('DIR /S /B C:\Windows') DO @ECHO File: %%d
FOR /F
可以選擇使用反引號,以防您需要將單引號傳遞給被調用的進程,但這與您的問題無關。
我假設您正在 powershell 中調用批處理文件及其變量。 單引號幾乎表示它們之間的文本的原樣 state 並且不會將其擴展為變量,而雙引號會擴展變量並將文本包裝成單個字符串。
例如。
$Hostname = "Computer Name"
Get-WmiObject Win32_computersystem -ComputerName '$Hostname'
這將嘗試搜索名為 $Hostname 的計算機
$Hostname = "Computer Name"
Get-WmiObject Win32_computersystem -ComputerName "$Hostname"
這將嘗試搜索名為“計算機名”的計算機
這是一個糟糕的示例,因為您不需要其中任何一個的引用,但您明白了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.