Sam*_*uel 2 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的一个foreach的例子.但显然我在这里遗漏了一些东西.
我也试图根据foreach中的替换和重命名参数重命名文件而不是路径中找到的目录.我不确定这些是否也有效,如果更有经验的眼睛可以给它一次,我会很高兴并且让我知道我正在尝试的是否应该工作以及是否有更好的方法.
正如PetSerAl指出的那样,使用:
foreach($file in Get-ChildItem -LiteralPath $path) {
    # ...
}
将工作.[ ]文件名中的方括号会导致问题,并且-LiteralPath不会解释它们.
从PowerShell v2开始,它们被视为特殊字符,用于字符范围.见走一步(如文件路径)从字面上看.
| 归档时间: | 
 | 
| 查看次数: | 153 次 | 
| 最近记录: |