带有路径的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 -LiteralPath(字面路径)