【发布时间】:2020-06-28 18:09:26
【问题描述】:
我用 bash 写了一个脚本。该脚本正在制作一个扩展名为 .DAT 的文件,该文件从 mp3 文件中获取详细信息。我使用 exiftool 来获取 id3 标签。 我有一个名为 Miley Cyrus - Wrecking Ball.mp3 的 mp3 文件,这个脚本制作文件 Miley Cyrus - Wrecking Ball.DAT,其中包含一些来自 ID3 标签的详细信息。
我在 bash 中的脚本。
#!/bin/bash
find . -name '*.mp3' -print0 | while read -d $'\0' file
do
ARTIST=$(exiftool -p '$Artist' "$file")
ALBUM=$(exiftool -p '$Album' "$file")
TITLE=$(exiftool -p '$Title' "$file")
touch "$file".DAT
echo "Lit=" >> "$file".DAT
echo "ENG=" >> "$file".DAT
echo "CRD=" >> "$file".DAT
echo "TIT=$TITLE" >> "$file".DAT
echo "ALB=$ALBUM" >> "$file".DAT
echo "ART=$ARTIST" >> "$file".DAT
done
我需要那个脚本,但在 Windows 中,这开始了我的麻烦。我不知道我可以从哪种方式开始。我必须使用哪些选项 for 循环,为什么 exiftool 没有从文件中获取标签?我尝试使用 fname 来分隔名称和扩展名,但没有结果。
- 我需要做什么才能开始在 Windows 中使用此脚本。
@echo off
setlocal enableDelayedExpansion
for %%a in (*.mp3) do (
set "Title=(exiftool -p Title '%%a')"
set "Album=(exiftool -p Album '%%a')"
set "Artist=(exiftool -p Artist '%%a')"
echo "Lit=" >> "%%a".DAT
echo "ENG=" >> "%%a".DAT
echo "CRD=" >> "%%a".DAT
echo "Title=%Title% >> "%%a".DAT
echo "Album=%Album% >> "%%a".DAT
echo "Artist=%Artist% >> "%%a".DAT
)
exiftool 在 windows 文件夹中。
【问题讨论】:
-
“.DAT”文件是否总是附加到,还是每次都是新的?
-
欢迎来到 SO,@Remik。这个问题相当广泛。 SO 倾向于一次只关注一 (1) 个问题。解决此问题的一种方法是将其编写为 pwsh 脚本。这将允许在 Linux、Mac、Windows 等上运行相同的代码。github.com/PowerShell/PowerShell
-
对于文件夹中的每个 mp3 都应该是新的,因为另一个程序使用 DAT 文件。 Bash 脚本做得很完美,但该程序只能在 Windows 上运行。
-
要将命令的输出捕获到变量中,请使用for /f。你需要delayed expansion
-
这比我通常看到的 bash-to-batch 问题要付出更多努力。做得好。似乎您唯一真正的问题是弄清楚如何将命令的输出存储在变量中,可以找到here。
标签: windows batch-file cmd