Powershell文件和子文件夹文件重命名

威尔士语

我对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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

重命名非空文件夹

python:通过子文件夹名称重命名子文件夹中的文件

重命名文件夹,并与现有文件夹合并(如果Powershell中存在该文件夹)

重命名子文件夹中的PowerShell错误

如何遍历子文件夹并重命名为父文件夹-文件夹-文件号

重命名文件目录文件夹

用于存档文件夹和重命名文件的脚本

批处理文件-根据父名称和(子)文件夹名称重命名文件

在文件夹,子文件夹和多个文件中递归查找和重命名

如何正确重命名文件夹?

php文件重命名和文件夹重命名

批。批量重命名文件夹和所有子文件夹中的文件

重命名文件夹中的文件

如何使用批处理脚本重命名多个文件夹和子文件?

重命名文件夹中的文件

增量复制和重命名文件夹

移动或重命名子文件夹

重命名不同子文件夹中的文件

Python脚本递归重命名文件夹和子文件夹中的所有文件

Applescript - 复制文件夹然后重命名和重命名里面的文件

使用子文件夹标签重命名子文件夹中的文件

Powershell 批处理文件夹重命名项目 - 限制长度和标准化

重命名提取文件的文件夹

Apple Script - 搜索文件夹和重命名文件

使用 PowerShell 重命名目录和子文件夹中具有给定名称的批量文件

使用 PowerShell 重命名给定目录和子文件夹中没有扩展名的所有文件

在 linux 中移动和重命名文件夹

通过子文件夹顺序重命名文件 - .bat

使用 Powershell 删除多个特定命名文件夹和其他带有文件的子文件夹