我看过几个主题,展示了如何根据文件名移动文件。我对此事还有其他问题。
我有一堆基于电视连续剧的视频文件,
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
我需要的是一个脚本,该脚本检查系列名称和季节并将其移动到相应的文件夹中。 有可能吗?
预先感谢
答案 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
,以创建目标路径和移动文件。