带有路径的Powershell foreach找不到文件

Posted

技术标签:

【中文标题】带有路径的Powershell foreach找不到文件【英文标题】:Powershell foreach with path not finding files 【发布时间】:2015-12-04 17:55:33 【问题描述】:

我正在尝试通过我的 foreach 块重命名特定目录中的文件,但没有找到任何文件。

#expected encountered filename = 3000 Miles To Graceland 2001.avi
$path = "D:\Media Holding\[UsaBit.com]_3000 Miles To Graceland 2001"
foreach($file in Get-ChildItem $path) 
        "FOUND ITEM"
        if (!$file.PSIsContainer) 
            $fileName = $file.FullName -replace ("(\w.*?)([12]\d3)", "$1 ($2)") -replace("\.", " ") -replace("\s2,", " ")
            $fileExtension = $file.FullName -replace ("[^\.]*\.(\w3,4)$", ".$1")
            $fileName = $fileName + $fileExtension
            Rename-Item -NewName $file $fileName
        
       

我的问题是 foreach 永远不会被输入。我可以通过控制台中永远不会显示“FOUND ITEM”的调试消息来证明这一点。

我曾尝试关注K. Brian Kelly's example of a foreach。但显然我在这里遗漏了一些东西。

我还尝试根据我在 foreach 中的替换和重命名参数重命名路径中找到的文件而不是目录。我不确定这些是否有效,如果更有经验的眼睛可以试一试,让我知道我正在尝试的方法是否可行以及是否有更好的方法,我会很高兴。

【问题讨论】:

$file in Get-ChildItem -LiteralPath $path 谢谢! -path 和 -LiteralPath 有什么区别? 【参考方案1】:

正如PetSerAl 指出的那样,使用:

foreach($file in Get-ChildItem -LiteralPath $path) 
    # ...

会起作用。您的文件名中的方括号 [ ] 会给您带来问题,而 -LiteralPath 不会解释它们。

从 PowerShell v2 开始,它们被视为特殊字符,用于字符范围。见Taking Things (Like File Paths) Literally。

【讨论】:

以上是关于带有路径的Powershell foreach找不到文件的主要内容,如果未能解决你的问题,请参考以下文章

在文件路径中运行带有空格的 PowerShell 脚本

带通配符的Powershell -LiteralPath(字面路径)

Powershell 脚本判断制定路径下文件是否存在(来源于网络-转载)

Powershell数组被解释为单个项目

PowerShell 中的嵌套 ForEach()

Powershell foreach