给定一个文件名列表,如何遍历子目录并返回这些文件所在的列表?

给定一个文件名列表,如何遍历子目录并返回这些文件所在的列表?

我发现了一个我非常想听的旧播放列表。不幸的是,它是为 USB 记忆棒创建的,其中的音乐已从我的收藏中复制到一个平面文件夹中。

我现在要做的是通过将这些文件名与我的主要音乐收藏中的路径进行匹配来重新创建该播放列表。

举例来说,假设我现有的播放列表如下所示:

F:\music\Artist 1 - Song 1.mp3
F:\music\Artist 2 - Song 2.mp3
F:\music\Artist 3 - Song 3.mp3

经过处理后,我可能会得到如下结果:

W:\Music Collection\Compilations\Compilations Forever 6\Artist 1 - Song 1.mp3
W:\Music Collection\Artist 2\This is the Album\Artist 2 - Song 2.mp3
W:\Music Collection\Unsorted New Stuff\Artist 3 - Song 3.mp3

保证文件名相同,但路径始终不同。

此播放列表中大约有 300 首曲目,因此手动逐个搜索每首曲目会很费力。我查看了 XCOPY,在阅读了有关 EXCLUDE 的内容后,我希望有一个 INCLUDE,但遗憾的是这不是一个选项。我还阅读了有关在批处理文件中使用 FOR 循环的内容,但我已经很久没有编写过批处理文件了,我不太确定从哪里开始。

非常感谢您的帮助

答案1

我假设您可以在文本文件中获取旧的播放列表 - 将其命名为“oldList.txt”。

首先,您需要在文本文件中获取修改后的列表,该列表仅包含文件名,不包含任何路径信息。然后,您可以将递归 DIR 命令的结果导入 FINDSTR,并将修改后的列表用作文字、不区分大小写的搜索字符串,该字符串必须与 DIR 命令中的完整路径的结尾匹配。

这是一个可以解决问题的简单批处理脚本:

@echo off
(for /f "eol=: delims=" %%F in (oldList.txt) do echo \%%~nxF)>searchList.txt
dir /b /s /a-d "W:\Music Collection\*"|findstr /lieg:searchList.txt >newList.txt
del searchList.txt

答案2

好的,这就是我所做的。这一切都是用正则表达式完成的。我 100% 确信有比这更简单的方法,但它确实有效,而且我只需要做一次,结果就很好了。

我使用了一个名为 Regex Buddy 的应用程序,但您也可以使用任何具有正则表达式支持的不错的文本编辑器。

请注意,以下所有正则表达式均设置为 ^ 和 $ 在换行符处匹配,并且正则表达式逐行处理。

我拿了原始文件列表:

F:\music\(Artist 1) - Song 1.mp3
F:\music\[Artist 2] - Song 2.mp3
F:\music\Artist 3 - Song 3 {remix}.mp3

并对其应用以下正则表达式:

^.*\\
replace with empty string

其结果是:

(Artist 1) - Song 1.mp3
[Artist 2] - Song 2.mp3
Artist 3 - Song 3 {remix}.mp3

然后我申请了

[\.\[\]\(\)\{\}]
replace with
\$0

其结果是

\(Artist 1\) - Song 1\.mp3
\[Artist 2\] - Song 2\.mp3
Artist 3 - Song 3 \{remix\}\.mp3

然后我申请了

$\s
replace with
|

其结果是

\(Artist 1\) - Song 1\.mp3|\[Artist 2\] - Song 2\.mp3|Artist 3 - Song 3 \{remix\}\.mp3

然后我申请了

.*
replace with
^.*\\($0)$

其结果是

^.*\\(\(Artist 1\) - Song 1\.mp3|\[Artist 2\] - Song 2\.mp3|Artist 3 - Song 3 \{remix\}\.mp3)$

我们现在有一个超长的正则表达式,它包含了我正在寻找的所有文件。

现在打开命令提示符,浏览到音乐总监并输入以下内容:

dir /s/b > filelist.txt

当命令完成后,打开filelist.txt并将我们构建的正则表达式应用于它作为搜索。

瞧!播放列表中的所有文件都找到了。当然,也有一些误报,即文件名重复,但这足以让我兴奋不已,而且没有花费太多时间(尽管看起来如此)

相关内容