我有一个Powershell文件,它替换了配置文件中的IP。 Powershell包含三个参数:
nil
)由于我们依赖于为服务使用批处理文件来处理任务,因此我编写了一个批处理脚本,该脚本只接受三个参数并将其发布到powershell脚本中。
我们使用批处理文件来调用和解析参数: ($仅用于表示变量)
'C:\Program Files (x86)\app\app.conf'
这失败了,但是我不明白为什么。我尝试在changeip.bat '$filepath' $oldip $newip
周围使用双引号而不是单引号,并且有效。
如何用双引号而不是单引号理解$filepath
中的空格?
答案 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
可以选择使用反引号代替,以防您需要将单引号传递给被调用的进程,但这与您的问题无关。