我一直在寻找一种快速轻松地一次性重命名数百个操作系统文件的方法。我只需要更换小部件就可以在其他地方重复使用。所以我最终开始制作这个剧本。如下所示。。。
输出应该是这样的:
Show Title - SXX.EXXX - Episode title - [release year]
原始文件看起来都是这样的:
XXX Episode title [release year]
它现在不起作用。我还不明白为什么。
每当我运行它时,它什么都不做。但我没有收到任何错误消息
$ShowTitle = "My Title -"
$SeasonNumber = "02"
# Getting all child files (In ALL subfolders)
$files = Get-Childitem –Path Get-Location -Recurse |
Where-Object { $_.Name -match $_.Name } |
# Insert a ' - ' between the episode number and the episode text.
Rename-Item -NewName {$_.BaseName.insert(5,'-') + $_.Extension} |
# Append title and season number to the beginning of the file.
Rename-Item -NewName { $ShowTitle + "S" + $SeasonNumber + ".E" + $_.Name} |
# Makes a "-" between episode title and year of release.
Rename-Item -NewName { $_.Name -replace '[', '- [' }
以前它的规模较小。像这样:
$files = Get-Childitem –Path "C:UsersuserVideosSeriesshowSeason x" -Recurse |
Where-Object { $_.Name -match 'show title' } |
Rename-Item -NewName { $_.Name -replace '[', '- [' }
但我想一次完成以上所有步骤。
有人能给我一个提示吗?这样我就能找到解决我小问题的正确答案?提前谢谢。
这里有很多错误。
Get-Childitem –Path Get-Location -Recurse
这没有道理。您正在当前目录中查找具有文字名称Get-Location
的文件或文件夹。像C:Get-Location
。如果要获取当前目录中的文件,只需不指定-Path
参数:Get-ChildItem -Recurse
即可。
Where-Object { $_.Name -match $_.Name }
是一种无意义的代码?-match
运算符的右侧将被视为正则表达式。这意味着CCD_ 9的意思是";任何字符";,方括号和圆括号有特殊的含义,等等。通常总是是真的,但我无法想象你真的想这么做。构造一个与具有相同字符串值的正则表达式不匹配的有效文件名是非常可能的。例如,'[01] File.avi' -match '[01] File.avi'
为false。
其次,-NewName
参数采用字符串,而{$_.BaseName.insert(5,'-') + $_.Extension}
是ScriptBlock。可能会工作,因为Powershell的某些部分允许这样做,但我习惯地说,这是错误的,因为它不会一致工作。一个更好的选择是使用带有嵌入子表达式(如-NewName "$($_.BaseName.Insert(5,'-'))$($_.Extension)"
(的字符串
最后,如果没有-PassThru
参数,Rename-Item
不会向管道传递任何输出。你只处理第一个项目,然后我想系统会抱怨管道空,或者只有第一个Rename-Item
会做任何事情。
试试这样的东西:
$ShowTitle = "My Title -"
$SeasonNumber = "02"
# Getting all child files (In ALL subfolders)
$files = Get-Childitem -Recurse |
Where-Object { $_.Name -match 'some value or delete this command if you want all files' } |
# Insert a ' - ' between the episode number and the episode text.
Rename-Item -NewName "$($_.BaseName.Insert(5,'-'))$($_.Extension)" -PassThru |
# Append title and season number to the beginning of the file.
Rename-Item -NewName "$($ShowTitle)S$($SeasonNumber).E$($_.Name)" -PassThru |
# Makes a "-" between episode title and year of release.
Rename-Item -NewName "$($_.Name -replace '[', '- [')" -PassThru