我一直在寻找过去几个小时,找不到一个简单的方法来做到这一点。
情景:
PARENT_FOLDER
----YEAR_FOLDER
--------MOVIE1_FOLDER
----------Movie1_Title.Ext
----------Eng.Srt
--------MOVIE2_FOLDER
----------Movie2_Title.Ext
----------02_ENG.SRT
----------03_ENG.SRT
--------MOVIE3_FOLDER
----------Movie3_Title.Ext
----------ENG.SRT
----------ENG-SDH.SRT
--------MOVIE4_FOLDER
----------Movie4_title.ext
----------Movie4.Randomstuff.SRT
--------MOVIE5_FOLDER
----------Movie5_title.ext
----------randomstuff.eng.srt
我想找到一些方法来创建批处理脚本,以递归方式将SRT文件重命名为VIDEO文件(AVI,MKV或MP4)。 如果有2,我想尽可能使用最大的一个,或者如果SRT名称有一个SDH将它添加到最后(Movie_Title.SDH.srt)。
我试过了:
@echo off
if exist "*SDH.srt" (
for %%f in ("*.avi") do ren *.srt "%%~nf.SDH.srt"
) else (
for %%f in ("*.avi") do ren *.srt "%%~nf.srt"
)
for %%f in ("*.avi") do ren *.srt "%%~nf.srt"
最后一行是获取第二个文件(如果有的话)(我在没有它的情况下尝试过它)......这根本不起作用。我有两个文件,一个是SDH,没有正确重命名。
唯一有效的是:
for %%f in ("*.avi") do ren *.srt "%%~nf.srt"
它只重命名了第一个找到的,必须在目录中运行。我在“for”之后添加了/ R,但它不能递归地工作。我试图将其分解,并使用示例目录和文件名分步进行,但这只是让脑力训练达到了一个全新的水平。
我甚至接近让这个工作吗?
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
FOR /d /r "%sourcedir%" %%a IN (*) DO (
REM %%a contains directory name. Look for movie file
FOR %%x IN (mkv avi mp4) DO (
IF EXIST "%%a\*.%%x" FOR %%m IN ("%%a\*.%%x") DO (
REM Look for *SDH.SRT file
IF EXIST "%%a\*SDH.SRT" (ECHO REN "%%a\*SDH.SRT" "%%~nmSDH.SRT"
) ELSE (
SET "renamed="
FOR /f "delims=" %%s IN ('dir /b /a-d /o-s "%%a\*.srt"') DO IF NOT DEFINED renamed (
ECHO REN "%%a\%%s" "%%~nm.SRT"
SET "renamed=Y"
)
)
)
)
)
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
为了测试目的,所需的REN命令仅为ECHO
。 在您确认命令正确后,将ECHO REN
更改为REN
以实际重命名文件。
首先对目录名称进行递归扫描到%%a
。找到每个目录后,在%%x
中查找所需的扩展名之一(我假设任何目录中只有一个),如果存在,则将%%m
设置为其名称。
在所找到的目录中查找*SDH.SRT
,如果存在,请在%%m
之前使用SDH.SRT
的名称部分重命名该*SDH.SRT
。如果没有renamed
文件,请清除*.srt
标志,然后以相反的顺序对目录中的for/f
文件名执行目录扫描,以便最大的列表首先列出。 %%s
将文件名依次分配给renamed
,因此可以重命名所需的largest-.srt文件,然后将*.srt
标志设置为一个值,使其成为*.srt
已定义,因此在目录中找到的其他== liste_caracteristiques
|------
|------
|//**idCarac**//|int(11)|Non|
|//**refproduit**//|int(11)|Non|
|valeur|varchar(255)|Oui|NULL
|0|4942|Windows
|0|8149|Android
|1|9980|300
|1|10300|1100
|1|10316|149.5
|2|4942|7
|2|8149|12
|2|9980|15cm
|2|10300|4cm
|2|10316|8.3cm
文件将不重命名。
我故意在其名称中使用了一个包含空格的目录进行测试,因此使用包含空格的文件/目录名进行处理似乎是正确的。我不会评论丢失== caracteristiques
|------
|------
|//**idCarac**//|int(11)|Non|
|libelleCarac|varchar(255)|Oui|NULL
|0|Système d'exploitation
|1|Poids
|2|Screen size
|3|ATEX
|4|Zone 0
|5|Zone 1
|6|Zone 2
文件或包含毒药字符的文件名可能会如何。