我对Powershell还是很陌生,现在已经阅读了太多示例,并且对Get-ChildItem示例感到不满。
我的电影的文件夹结构如下
Films
├─Film1
| Film1Name.mp4
│ └─Subs
│ └─English.SRT
│
├─Film2
| Film2Name.mp4
│ └─Subs
│ └─English.SRT
|
├─Film3
| Film3Name.mp4
│ └─Subs
│ └─English.SRT
我要实现的是将* .srt文件重命名并移动到文件夹级别,然后重命名为影片的文件名或影片的文件夹名,并在扩展名之前将.ENG插入.SRT文件名。然后删除未使用的“ Subs”文件夹,然后递归执行此操作。
根据文件名结束以下内容
├─Film1
| Film1Name.mp4
│ Film1Name.ENG.SRT
或基于文件夹名称
├─Film1
| Film1.mp4
│ Film1.ENG.SRT
任何帮助将不胜感激,无论哪种方法都可以
我正在别人的帖子中使用此代码,并删除了我的测试文件夹
$rootPath = "c:\Test"
Get-ChildItem -Path $rootPath -Directory | ForEach-Object {
$targetFolder = $_.FullName
Resolve-Path "$targetFolder\*" | ForEach-Object {
Move-Item -Path "$_\*.SRT" -Destination $targetFolder -Force
Remove-Item -Path $_
}
}
首先,要在设置根目录后获得所有以“电影”命名的顶级目录的列表。
Set-Location -Path "Your directory path here"
$Films = Get-ChildItem -Directory
完成此操作后,我们将遍历每个目录,将位置推送到该目录并检查是否存在名为“ Subs”的文件夹。Pop-Location
完成我们需要做的事情后,将我们返回到先前的位置。
foreach ($Film in $Films) {
Push-Location $Film
if ((Get-ChildItem -Directory).Name -contains "Subs") {
# Do stuff
}
Pop-Location
}
如果找到“ Subs”目录,则要检查是否存在“ .SRT”文件。我们可能有多种语言的字幕。
$Subs = Get-ChildItem -Path *.srt -Recurse
检查是否$Subs
不为空。
if ($null -ne $Subs) { }
将所有“ .SRT”文件移动到当前位置,然后按指定的名称重命名。
foreach ($Sub in $Subs) {
$FilmPath = $Film.Fullname
$FilmName = $Film.Name
$SubtitleLang = $Sub.BaseName.Substring(0,3).ToUpper()
$Extension = $Sub.Extension
Move-Item -Path $Sub -Destination "$FilmPath\$FilmName.$SubtitleLang$Extension"
}
如果您完全确定要删除“ Subs”文件夹,我们将首先检查其是否为空。如果仍有剩余文件,我们可以写一条消息。
$RemainingFiles = Get-ChildItem -Path Subs -Recurse
if ($null -eq $RemainingFiles) {
Remove-Item -Path Subs -Force
}
else {
Write-Warning "There are still files in $($Film.FullName)\Subs"
}
全部放在一起
Set-Location -Path "Your directory path here"
$Films = Get-ChildItem -Directory
# Loop through the Films
foreach ($Film in $Films) {
Push-Location $Film
if ((Get-ChildItem -Directory).Name -contains "Subs") {
# Find any SRT files in the "Subs" directory
$Subs = Get-ChildItem -Path Subs/*.srt -Recurse
if ($null -ne $Subs) {
foreach ($Sub in $Subs) {
$FilmPath = $Film.Fullname
$FilmName = $Film.Name
$SubtitleLang = $Sub.BaseName.Substring(0,3).ToUpper()
$Extension = $Sub.Extension
Move-Item -Path $Sub -Destination "$FilmPath\$FilmName.$SubtitleLang$Extension"
}
}
}
# Remove the Subs folder
$RemainingFiles = Get-ChildItem -Path Subs -Recurse
if ($null -eq $RemainingFiles) {
Remove-Item -Path Subs -Force
}
else {
Write-Warning "There are still files in $($Film.FullName)\Subs"
}
# Return to the root directory for the next folder.
Pop-Location
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句