簡體   English   中英

CMD中單引號和雙引號的區別

[英]Differences between single and double quotes in CMD

我有一個 powershell 文件,它替換了配置文件中的 IP。 powershell 接受三個參數:

  1. 文件名( 'C:\Program Files (x86)\app\app.conf'
  2. IP 替換
  3. 新 IP

由於我們的服務依賴於使用批處理文件來處理任務,因此我編寫了一個批處理腳本,它只需要三個參數並將其發布到 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.

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