我的powershell脚本:
$dst = 'C:\Temp'
#Get all folders in $dst
$folders = Get-ChildItem $dst | ?{ $_.PSIsContainer }
foreach($folder in $folders)
{
$cnt = (Get-ChildItem -filter *.txt $folder | Measure-Object).Count
$base = ($folder.FullName -split " \[.*\]$")[0]
$newname = $("{0} [{1}]" -f $base,$cnt)
Write-Host $folder.FullName "->" $newname
Rename-Item $folder.FullName $newname
}问题
在我第一次跑步的时候,我得到了这个:
PS C:\Temp> C:\Temp\RenameFolders.ps1
C:\Temp\m1 -> C:\Temp\m1 [1]在我的第二轮比赛中,我得到了这个:
PS C:\Temp> C:\Temp\RenameFolders.ps1
C:\Temp\m1 [1] -> C:\Temp\m1 [0]
Rename-Item : Cannot rename because item at 'C:\Temp\m1 [1]' does not exist.
At C:\Temp\RenameFolders.ps1:15 char:5
+ Rename-Item $folder.FullName $newname
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand我知道问题出在“和”里,但我真的不明白为什么。
有人能解释一下为什么这是个问题吗?
发布于 2014-04-24 13:52:47
如果您正在运行PS 3+,将-LiteralPath开关添加到您的重命名中:
Rename-Item -LiteralPath $folder.FullName $newname否则使用Move-Item
Move-Item -LiteralPath $folder.FullName $newnamePowershell不喜欢文件名中的方括号,在下面的帖子中有更多内容
当V2将方括号添加到通配符字符集以支持"blobbing“时,这就成了一个问题。
来自get-help about_wildcards
Windows PowerShell支持下列通配符。 通配符描述示例匹配否匹配
[和]是两个特殊的字符。
https://stackoverflow.com/questions/23268463
复制相似问题