将文件移动到匹配的目录

时间:2021-02-02 01:21:22

标签: powershell windows-10-desktop

请寻求帮助 - 我没有编写代码的经验,所以一直在寻找一个接近的问题/答案,但是..... 我庞大的电影数据库位于 NAS 驱动器“Video Y”上,每部电影都在其自己的子目录中;它有多种视频文件类型,大多数是 .avi,我想将所有 .avi 转换为 .mp4(某些设备不会播放 .avi”)。 所以我过滤掉了所有的 .avi 文件并将它们放在一个新目录“0 temp holder for avi”中,这样​​我就可以使用 VideoProc 进行转换;这将 .mp4 文件转换并放置在一个新目录“00 temp holder MP4”中。

现在我想将 .mp4 文件移回它们自己的原始子目录中,该子目录仍然包含与电影相关的各种文件,如 .srt 等。 我认为对我来说最简单的方法是按字母顺序排列文件并按相同顺序排列目录(因为目录名和文件名不一定完全相同),检查不匹配并根据需要更正,并使用一些代码将第一个文件移动到第一个目录,并从那里迭代。但我仍然很困惑,不确定是否要去做。 我放在 Windows10 和 Powershell 标签下,但有人可以帮助提供更准确的标签。 Directory layout

1 个答案:

答案 0 :(得分:0)

如下所示的PowerShell脚本开头,$arrVideoFolders变量是将所有文件夹名称加载到一个数组中。

$arrFolder 变量用于单独数组中所有视频文件的文件名。

如下图,

$arrVideoFolders = Get-ChildItem (Folders for the videos) | 
       Where-Object {$_.PSIsContainer} | 
       Foreach-Object {$_.Name}

$arrFolder = Get-ChildItem (Video file names) | 
       Where-Object {$_.PSIsContainer} | 
       Foreach-Object {$_.Name}

给出我将如何编写 PowerShell 脚本的其余部分的逻辑。

之后,将使用 foreach 循环遍历所有文件夹,而 foreach 文件夹将使用第二个嵌套的 foreach 循环遍历您的视频文件。一个 if 语句会测试,视频名称就像,你的文件夹名称。这是因为您的视频文件名称相似,一旦找到您可以进行复制粘贴或剪切粘贴。

为了测试,可以使用文件夹和简单的空文本文件,而不是复制大文件,并在不同的文件夹中进行测试。

相关问题