我有一个音乐库,里面大部分都是 mp3 文件。我使用 Minilyrics 为每个 mp3 下载 .lrc 文件,因此大多数 mp3 文件在同一个文件夹中都有一个对应的歌词文件,文件名相同但扩展名为 .lrc。
现在我需要列出mp3 文件没有歌词。有没有办法在 PowerShell 或命令行中执行此操作?
答案1
.mp3
下面的 PowerShell 将列出任何文件的完整路径名.lrc
在同一目录中没有具有相同基本文件名的任何匹配文件。
只需将 更改$pth =
为文件所在的起始文件夹的完整路径即可.mp3
。此解决方案还将递归遍历文件夹以查找任何子文件夹中的$pth
所有文件。.mp3
电源外壳
$pth = "C:\MP3\Folder\Location";
Get-ChildItem -Path $pth -Recurse -Include "*.mp3" | % { Process {
If ( ! ( Test-Path "$((Split-Path $_.FullName -Resolve))\$($_.BaseName).lrc" ) )
{ $_.FullName };
}};
支持资源
答案2
如果您的计算机上安装了 Python,您可以将此代码粘贴到名为的文件中songlister.py
,并将其放在与所有.mp3
和.lrc
文件相同的文件夹中,然后从命令行运行它,如下所示:
python songlister.py
它会列出所有没有文件的歌曲名称.lrc
!
代码如下:
import glob,re
# These give the lists of all the .mp3 and .lrc files in your current folder and sub folders
mp3_files = glob.glob("/**/*.mp3", recursive=True)
lyric_files = glob.glob("/**/*.lrc", recursive=True)
# For every .mp3 file, check if it has a matching .lrc file.
for i in mp3_files:
music_name = re.search(".*\.mp3$", i).group().replace('.mp3', '')
match = False
for s in lyric_files:
lyric_name = re.search(".*\.lrc$", s).group().replace('.lrc', '')
# If it does NOT have a .lrc file, then list the name of the file.
if lyric_name == music_name:
match = True
break
if not match:
print(i)
答案3
以下是我将使用的低技术方法。在命令提示符下,执行dir /b|sort > list.txt
。这将生成文件 list.txt 中的文件列表,按字母顺序排列。
然后在 Excel 或 Google 表格中打开该文件。文件名列表将显示在 A 列中。在单元格 B1 中输入=RIGHT(A1,LEN(A1)-FIND(".",A1))
,然后将其复制到整个 B 列(或者更确切地说,只要文件名存在);具体来说,在单元格 B1 上按Ctrl-C
,然后选择整个列,然后按Ctrl-V
。这将在 B 列上生成扩展名列表。然后,在单元格 C1 中输入=IF(B1=B2,A1,"")
,然后再次复制整个列。现在在 C 列上,您没有 lrc 文件的文件列表(正确地说,这还会显示一个有 lrc 但没有 mp3 文件的文件)。