批量组合新元素到字幕文件



我想用几个文件夹(在第一个例子中是15个)"字幕。srt文件(我相信你知道,它只是扩展名为".srt"的文本文件)。而不是".txt"),并依次修改每个文件,以便添加一个新的副标题在每个文件的开头。我想要新的副标题为:-

0
00:00:00,001 --> 00:00:02,100
"Filename"

因此,例如,如果文件夹中的第一个字幕文件名为">01。";它看起来像这样:-

1
00:00:02,120 --> 00:00:03,560
<font color="#FFFF00">Previously on Superman & Lois...</font>
2
00:00:03,560 --> 00:00:06,880
<font color="#00FFFF">I'm stepping down from active duty.</font>
<font color="#00FF00">You're going to be hard to replace.</font>
3
Etc., etc...

然后处理后,我希望它看起来像这样:-

0
00:00:00,001 --> 00:00:02,100
01. What Lies Beneath
1
00:00:02,120 --> 00:00:03,560
<font color="#FFFF00">Previously on Superman & Lois...</font>
2
00:00:03,560 --> 00:00:06,880
<font color="#00FFFF">I'm stepping down from active duty.</font>
<font color="#00FF00">You're going to be hard to replace.</font>
3
Etc., etc...

我是垃圾在批处理编码,所以我试图寻找可能的方法来做到这一点,但没有我尝试工作!

下面是我使用不同的"程序"所做的一些尝试。我发现;每次连续的尝试(从最后一次到第一次)由PAUSE, EXIT命令分隔:-

for %%a in (*.txt) do type append_ns0 >> %%a.srt
pause
exit
for %%a in (*.txt) do type append_ns0 >> %%a
for %%a in (*.txt) do type "%%~na" >> %%a
for %%a in (*.txt) do type append_spc >> %%a.srt
pause
exit

for %%I in (*.txt) do copy "C:UserswbcamDesktopG classroomAddTitle.txt"+"%%~nI"+" "+"%%I" "%%~nI.srt"
pause
exit
for %X in (C:UserswbcamDesktopG classroomAdd Titles*.txt) do type C:UserswbcamDesktopG classroomAddTitles.txt >> %X
pause
exit

要使用COPY命令,我必须首先将文件从。srt重命名为。txt(我宁愿不这样做;我希望有人能告诉我如何在没有任何中间阶段的srt文件上工作)和COPY似乎也在新文件的末尾添加了一个hex1A字符,但是,当然,它无法处理文件名(文本字符串)插入到新文件中,因为它只会连接文件而不是strings(如果我最终正确理解了它的操作,呵呵!)尝试使用ECHO或TYPE命令似乎会覆盖所有,只留下:-

0
00:00:00,001 --> 00:00:02,100

等等!

有谁能帮帮忙吗?
@ECHO OFF
SETLOCAL
rem The following setting for the source directoryis a name
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:your files"
FOR /f "delims=" %%b IN (
'dir /b /a-d "%sourcedir%*.srt" '
) DO (
(
ECHO 0
ECHO 00:00:00,001 --^> 00:00:02,100
ECHO "%%~nb"
ECHO.
TYPE "%sourcedir%%%b"

)>"%sourcedir%%%~nb.txt"
MOVE "%sourcedir%%%~nb.txt" "%sourcedir%%%b" >NUL
)
GOTO :EOF

在应用于实际数据之前,始终针对测试目录进行验证。

执行目录扫描。将每个与掩码匹配的文件名分配给%%b

将所需的两行写入输出,一行包含文件名的名称部分(用引号括起来),另一行为空行,然后键入所选文件的内容。注意,文本中的>字符需要用插入符号进行转义。收集echoes的输出并将其重定向到.txt文件,然后将.txt文件写入原始文件。1 file(s) copied消息被>nul消息抑制。

如果您愿意,您可以将插入固定文本的两行echo替换为type somefilename,其中somefilename包含所需的固定文本。

您可以用

替换move行进行测试
FC "%sourcedir%%%~nb.txt" "%sourcedir%%%b"

将显示差异。

copy在文本文件中将^Z标记为文件结束的古老约定之后添加control-z。

——对注释

的回应for /?从提示符生成关于for命令的文档——一般来说,commandname /?为任何命令生成文档,尽管有些命令需要-?-h--h--help。实用程序设计人员通常遵循相同的约定,细节取决于软件最初设计的平台。

for /f ... ('command....') do ...将命令输出解释为一个文件。

dir命令报告目录中的文件名和子目录名。默认情况下,它生成一个格式化的报告,包括文件大小和最后更新日期,但有许多选项,包括/b,以生成"基本";报告(只有名称,没有大小,标题,摘要,日期等)和/a-d,它抑制目录名。/s选项表示"并列出子目录"。它还可以接受filemask(或不明确的文件名)——这同样适用于目录名。如果提供的文件名包含?,则表示any ONE character*,这意味着any number of any characters-任何其他字符都按字面意思进行匹配,无论大小写如何。因此,*.srt表示any number of any characters followed by.srtwhich should select all file/directorynames that end.srt. The filemask may be preceded by *directoryname\* which means扫描此目录- but *that* directoryname may **not** contain?or*’。

for /f以基本形式提供文件名列表时,列表中的每个文件名依次分配给已分配的metavariable(本例中为%%a),do语句使用metavariable中分配的值执行。同样,有许多方法可以让for /f解释分配给metavariable的值字符串。SO

上有很多这样的例子

在CP/M时代,filesize是128字节的块数。由于文件长度通常不是128字节的倍数,因此惯例是用control-z标记文件的结束。向后兼容性是计算中的一个大问题,因为修改现有系统以满足概念修订是一种浪费。因此,对于文本文件,仍然可以识别和遵守control-Z约定。

最新更新