【问题标题】:PowerShell Returning "False" for Test-Path "C$\Program Files (x86)"PowerShell 为测试路径“C$\Program Files (x86)”返回“False”
【发布时间】:2014-10-30 15:36:22
【问题描述】:

当试图将文件复制到目录时-

Copy-Item $Source -Destination "C$\Program Files (x86)" -Recurse -EA Continue -EV +PushFailures

我无法这样做。所以我尝试测试看看 PowerShell 是否能看到目录-

Test-Path "C$\Program Files (x86)"

它返回“False”,即使它显然存在。

我在这里做错了什么,我该如何纠正?我读到了“$env:programfiles”,虽然我不确定如何将它实现到字符串变量中。

提前致谢。

【问题讨论】:

    标签: powershell path output copy-item


    【解决方案1】:

    我不习惯在这种情况下使用C$\Program Files (x86),因为它通常在远程管理共享中引用,例如\\Computername\C$\Program Files (x86)。您的意思是只使用C:\Program Files (x86)

    部分问题在于$ 是 PowerShell 中的保留字符,需要在字符串中进行转义。有两种方法可以利用你所拥有的东西来做到这一点:

    -Destination "C`$\Program Files (x86)"
    -Destination 'C$\Program Files (x86)'
    

    我觉得这行不通。如果您只想要程序文件的本地路径,那么这将帮助您按照您的建议包含环境变量

    -Destination "$env:ProgramFiles"
    -Destination "${env:ProgramFiles(x86)}"
    

    如果路径同时包含字符串元素和变量,那么您需要确保它们通过使用子表达式正确展开

    -Destination "$($env:ProgramFiles)\Internet Explorer"
    

    【讨论】:

    • 我实际上是在远程共享的上下文中使用它。实际的复制命令使用“\\$station\$rootdestination”作为目的地,其中“$station”表示要将文件复制到的网络PC。
    • 我尝试了以下 - Test-Path "$env:ProgramFiles" Test-Path "${env:ProgramFiles(x86)}" 它们都有效。但是,当尝试在最后连接目录时,它会失败-Test-Path "$($env:ProgramFiles)" += "\SUMMIT WOC" Test-Path "$($env:ProgramFiles)\SUMMIT WOC"
    • 这实际上结束了工作 - "${env:ProgramFiles(x86)}\Directory" 感谢您的所有指导和帮助!
    • @Brady 听起来您需要确定您的计算机是什么架构。 $env:ProgramFiles 通常会在 32 位和 64 位主机上解析为 C:\program files\。而 ${$env:ProgramFiles(x86)} 在 64 位主机上将是 C:\Program Files (x86)
    • $env:ProgramFiles(x86) 是对本地环境变量的引用,不会转换为远程主机。 "\\$computer\C`$\Program Files(x86)\$Directory" 将是您正在寻找的更多内容。
    猜你喜欢
    • 2015-02-03
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    相关资源
    最近更新 更多