Powershell CMD中单引号和双引号的区别

Powershell CMD中单引号和双引号的区别,powershell,batch-file,cmd,Powershell,Batch File,Cmd,我有一个powershell文件,它替换配置文件中的IP。 powershell具有三个参数: 文件名('C:\ProgramFiles(x86)\app\app.conf') 要替换的IP 新知识产权 由于我们的服务依赖于使用批处理文件来处理任务,因此我编写了一个批处理脚本,该脚本只接受三个参数,并将其发布到powershell脚本 我们使用批处理文件调用和解析参数: ($仅用于表示变量) 这失败了,但我不明白为什么。我尝试过在$filepath周围使用双引号而不是单引号,效果很好 如何用双引

我有一个powershell文件,它替换配置文件中的IP。 powershell具有三个参数:

  • 文件名(
    'C:\ProgramFiles(x86)\app\app.conf'
  • 要替换的IP
  • 新知识产权
  • 由于我们的服务依赖于使用批处理文件来处理任务,因此我编写了一个批处理脚本,该脚本只接受三个参数,并将其发布到powershell脚本

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

    这失败了,但我不明白为什么。我尝试过在
    $filepath
    周围使用双引号而不是单引号,效果很好


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

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

    例如

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

    $Hostname = "Computer Name"
    Get-WmiObject Win32_computersystem -ComputerName "$Hostname"
    
    这将尝试搜索名为“计算机名”的计算机

    这是一个糟糕的例子,因为您不需要对其中任何一个使用引号,但您知道了。简而言之,CMD只将单引号视为常规字符。它不像双引号那样是一对/一组

    单引号唯一具有特殊意义的地方是在
    FOR/F
    循环中,在该循环中指定一个命令来运行并迭代输出

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

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

    如果没有
    changeip.bat的代码,就有点难以解释为什么它不起作用。可能是重复的。在其他笔记上帮了不少忙。谢谢你,魔术师!非常感谢你的帮助!
    
    $Hostname = "Computer Name"
    Get-WmiObject Win32_computersystem -ComputerName "$Hostname"
    
    FOR /F %%d IN ('DIR /S /B C:\Windows') DO @ECHO File: %%d