根据名称移动文件(额外复杂)

时间:2018-12-19 18:02:20

标签: powershell

我看过几个主题,展示了如何根据文件名移动文件。我对此事还有其他问题。 我有一堆基于电视连续剧的视频文件,
name of the series + season + episode number
例如:Breaking.Bad.s01e03
我的文件的组织方式如下:

d:\series\breaking bad\season01
d:\series\breaking bad\season02
d:\series\breaking bad\season03
...
etc

我需要的是一个脚本,该脚本检查系列名称和季节并将其移动到相应的文件夹中。 有可能吗?

预先感谢

1 个答案:

答案 0 :(得分:1)

我很无聊,并决定回答您的问题,即使您忽略了“如何提出一个好问题”信息... [皱眉]

OP需要使它不区分大小写-.Replace()方法不是。改为使用-replace运算符。

$FileName = 'Breaking.Bad.S01e03'

$Series = $FileName.Substring(0, $FileName.LastIndexOf('.')).Replace('.', '_')
# disabled the initial version since the OP now needs case-insensitive replacement
#$Season = $FileName.Split('.')[2].Split('e')[0].Replace('s', 'Season')
$Season = $FileName.Split('.')[2].Split('e')[0] -replace 's', 'Season'

$Series
$Season

输出...

Breaking_Bad
Season01

i将为您提供从以上内容构建路径以及如何移动文件的过程。 [咧嘴]这是一条提示...

Get-Help Join-Path
Get-Help Move-Item

OP更改了文件的整个格式,因此这是可以使用该格式的版本。没有给出其他格式,因此没有编码其他格式。

如果还需要其他格式,并且OP无法为其编码,请提出一个新问题。

# fake reading in filenames
#    in real life, use Get-ChildItem
$FileList = @(
    [System.IO.FileInfo]'Breaking.Bad.S01E01.DVDRip.XviD-ORPHEUS.avi'
    [System.IO.FileInfo]'Breaking.Bad.s02E01.DVDRip.XviD-ORPHEUS.avi'
    [System.IO.FileInfo]'Breaking.Bad.S03e01.DVDRip.XviD-ORPHEUS.avi'
    [System.IO.FileInfo]'Breaking.Bad.s04e01.DVDRip.XviD-ORPHEUS.avi'
    )

foreach ($FL_Item in $FileList)
    {
    $SeriesName = ($FL_Item.BaseName -split '\.s\d')[0].Replace('.', '_')
    $SE_Info = $FL_Item.BaseName.Split('.')[-3] -split 'e'

    $Season = $SE_Info[0] -replace 's', 'Season'
    $Episode = 'Episode{0}' -f $SE_Info[1]

    $SeriesName
    $Season
    $Episode
    ''
    }

输出...

Breaking_Bad
Season01
Episode01

Breaking_Bad
Season02
Episode01

Breaking_Bad
Season03
Episode01

Breaking_Bad
Season04
Episode01

再次

,我将带您参考Join-Path,New-Item和Move-Item,以创建目标路径和移动文件。