CMD中单引号和双引号之间的差异

时间:2018-06-28 10:11:30

标签: powershell batch-file cmd

我有一个Powershell文件,它替换了配置文件中的IP。 Powershell包含三个参数:

  1. 文件名(nil
  2. 要替换的IP
  3. 新IP

由于我们依赖于为服务使用批处理文件来处理任务,因此我编写了一个批处理脚本,该脚本只接受三个参数并将其发布到powershell脚本中。

我们使用批处理文件来调用和解析参数: ($仅用于表示变量)

'C:\Program Files (x86)\app\app.conf'

这失败了,但是我不明白为什么。我尝试在changeip.bat '$filepath' $oldip $newip 周围使用双引号而不是单引号,并且有效。

如何用双引号而不是单引号理解$filepath中的空格?

2 个答案:

答案 0 :(得分:1)

我假设您正在Powershell中调用批处理文件及其变量。 单引号几乎表示它们之间文本的状态,并且不会将其扩展为变量,而双引号会将变量扩展并将文本包装为单个字符串。

EG。

$Hostname = "Computer Name"
Get-WmiObject Win32_computersystem -ComputerName '$Hostname'

这将尝试搜索名为$ Hostname的计算机

$Hostname = "Computer Name"
Get-WmiObject Win32_computersystem -ComputerName "$Hostname"

这将尝试搜索名为“计算机名”的计算机

这是一个很糟糕的例子,因为您都不需要引号,但是您知道了。

答案 1 :(得分:0)

简短的答案是 CMD不会将单引号视为常规字符。它不是像双引号那样的成对/组。

单引号具有任何特殊含义的唯一地方是在FOR /F循环中,您在其中指定要运行的命令并遍历输出。

FOR /F %%d IN ('DIR /S /B C:\Windows') DO @ECHO File: %%d

FOR /F可以选择使用反引号代替,以防您需要将单引号传递给被调用的进程,但这与您的问题无关。