连接/合并日期范围内的 mp3 文件

Posted

技术标签:

【中文标题】连接/合并日期范围内的 mp3 文件【英文标题】:Concatenate / merge mp3 files in date range 【发布时间】:2021-04-27 16:38:33 【问题描述】:

我使用下面的代码来连接/合并 mp3 文件。

我所有的目录都是yyyymmdd 格式。

第一行copy /b %result%\%result%\mp3\*.mp3 是相同的20210123\20210123

set day=020210123 (今天),如果我改为 -1,是20210122(昨天)-3520201219120210124(明天)

这很有效,并且可以很好地连接我的文件 mp3,但我怎样才能将其更改为在日期范围内工作?

示例:

day=0 -> day=-35,即20210123-20201219

我想我需要做一些循环,但我不知道怎么做。

另外一个问题,copy /b,当我运行我的 .bat 时,一直覆盖输出 mp3 文件,如果它已经存在,是否可以“自动”跳过?

@echo off
chcp 65001
set day=0
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%"
set "MM=%result:~4,2%"
set "DD=%result:~6,2%"
set "result=%yyyy%%mm%%dd%"
copy /b %result%\%result%\mp3\*.mp3 %result%\"podcastsí-%result%-all.mp3"
copy /b %result%\mp3\*.mp3 %result%\"podcastsí-%result%-all.mp3"
pause

【问题讨论】:

复制 /b 有时需要 20-30 个或更多目录中的文件,没有 /b 只需复制第一个 抱歉,我发帖时没有动脑筋,现在删除了评论。您似乎确实将多个文件复制到一个文件中,所以是的,您将需要 /B 选项。您需要做的就是先检查文件是否存在,如下所示:If Exist "%result%\"podcastsí-%result%-all.mp3" (Copy /B …)。您可以通过在命令提示符窗口中键入if /? 并按[ENTER] 键来了解有关If 命令的更多信息。至于您的主要问题,您似乎希望添加新代码,而不是帮助修复某些东西。这是题外话,我们不提供代码来请求。 谢谢你也很有帮助!抱歉,下次我不会在一篇文章中同时使用这两种方法!还要感谢将我的帖子编辑为英文! :) 当然,一旦您阅读了这些信息,您应该很快就会看到我在上面发布的内容中的故意错误。尽管我不太愿意故意含糊其辞,但如果我注意到有人已经为您提供了针对您的离题代码请求的答案。 【参考方案1】:
@echo OFF

set day=0
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "dayend=%%a"
del "%temp%\%~n0.vbs"

set day=-35
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "daystart=%%a"
del "%temp%\%~n0.vbs"


:: My system sets daystart and dayend to yyyymmdd format. Yours may need to be re-calculated.
:: Following if exist looks for directory named "%%y\%%y\mp3" and skips if missing

:: Caution : I have modified your name to "podcasts" below to suit my system

FOR /L %%y IN (%daystart%,1,%dayend%) DO IF EXIST %%y\%%y\mp3\. (
 IF NOT EXIST %%y\"podcasts-%%y-all.mp3" copy /b %%y\%%y\mp3\*.mp3 %%y\"podcasts-%%y-all.mp3" >nul
 IF NOT EXIST %%y\"podcasts-%%y-all.mp3" COPY /b %%y\mp3\*.mp3 %%y\"podcasts-%%y-all.mp3" >nul
)

GOTO :EOF

我不太确定每个目录执行的两个 copy 命令,建议将 copy 更改为 echo copy 以显示建议的操作以进行验证。

【讨论】:

这太棒了 :) 我复制了你的 FOR /L 和 mod 一点,现在可以同时使用 %%y\mp3*.mp3 ; %%y\%%y\mp3*.mp3 也不能覆盖我的文件很酷:) 谢谢!

以上是关于连接/合并日期范围内的 mp3 文件的主要内容,如果未能解决你的问题,请参考以下文章

范围内的熊猫非等分连接

使用java连接mp3文件或加入mp3文件[关闭]

范围连接 data.frames - R 中具有日期范围/间隔的特定日期列

如何连接列值在一定范围内的两个数据框?

Python通过内连接合并Pandas数据集有两个字段

spark sql怎么去获取hive 表一定日期范围内的数据