Powershell foreach,路径找不到文件

时间:2015-09-08 22:12:35

标签: regex powershell foreach rename

我正在尝试通过我的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]\d{3})", "$1 ($2)") -replace("\.", " ") -replace("\s{2,}", " ")
            $fileExtension = $file.FullName -replace ("[^\.]*\.(\w{3,4})$", ".$1")
            $fileName = $fileName + $fileExtension
            Rename-Item -NewName $file $fileName
        }
    }   

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

会奏效。文件名中的方括号[ ]会导致问题,-LiteralPath不会解释它们。

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