路径中括号的奇怪行为

lal*_*ibi 11 powershell path

当路径中有方括号时,PowerShell会出现奇怪的行为.例如,如果您在文件夹中:

C:\Some Movie [2011]
Run Code Online (Sandbox Code Playgroud)

其中包含一个mkv文件并键入:

ls *.mkv
Run Code Online (Sandbox Code Playgroud)

什么都没有回来!我认为问题在于PowerShell尝试执行以下操作:

Get-ChildItem 'C:\Some Movie [2011]\*.mkv'
Run Code Online (Sandbox Code Playgroud)

因为[2011]被认为是通配符而失败.我能够mkv使用以下命令从这样的文件夹中检索所有内容:

Get-ChildItem -LiteralPath 'C:\Some Movie [2011]' -Include *.mkv
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在Rename-Item命令中提供这些结果时,它会失败.

Get-ChildItem -LiteralPath 'C:\Some Movie [2011]' -Include *.mkv | Rename-Item -NewName "movie.mkv"
Run Code Online (Sandbox Code Playgroud)

没有括号的文件夹中的相同操作运行没有问题.有任何想法吗?

Sha*_*evy 8

请参阅我对您的问题的评论(上图).如果您希望在该文件夹中只有一个mkv文件,这将工作.Rename-Item不支持LiterlPath(在v3中修复),您可以使用.NET.我还建议(当您只过滤一个扩展名时)使用-Filter而不是Include时,它的执行速度更快.

Get-ChildItem -LiteralPath 'D:\Some Movie [2011]' -Filter *.mkv | Foreach-Object{
    $NewName = Join-Path -Path $_.DirectoryName -ChildPath 'movie.mkv'
    [System.IO.File]::Move($_.FullName,$NewName)
}
Run Code Online (Sandbox Code Playgroud)