Batch file 批处理文件要重命名特定文件,请排除多个文件夹中的特定文件

Batch file 批处理文件要重命名特定文件,请排除多个文件夹中的特定文件,batch-file,cmd,file-rename,Batch File,Cmd,File Rename,你好 我有一个包含电影文件夹的文件夹。在每个文件夹中,都有视频文件,.srt用于字幕,jpg用于海报,最后我还包括了上述电影的预告片 我想要一个批处理文件,该文件将: 将我的所有.mp4.mkv.avi电影文件以及.srt重命名为其文件夹名,因为我将我的文件夹重命名为搏击俱乐部1999[1080p],因此电影文件和.srt将具有相同的名称,当然除了扩展名 将所有*.jpeg*.jpg*.png重命名为poster.jpg或poster.png 将所有拖车文件重命名为just traile.mp4

你好

我有一个包含电影文件夹的文件夹。在每个文件夹中,都有视频文件,.srt用于字幕,jpg用于海报,最后我还包括了上述电影的预告片

我想要一个批处理文件,该文件将:

将我的所有.mp4.mkv.avi电影文件以及.srt重命名为其文件夹名,因为我将我的文件夹重命名为搏击俱乐部1999[1080p],因此电影文件和.srt将具有相同的名称,当然除了扩展名

将所有*.jpeg*.jpg*.png重命名为poster.jpg或poster.png

将所有拖车文件重命名为just traile.mp4。我为每一部电影都放了预告片,每当你下载一部电影时,我都想删除混乱的文件名,比如——搏击俱乐部——TBT预告片——20世纪福克斯,然后把它变成预告片。mp4

排除重命名已具有尾部文件名的文件

每个文件夹名称如下所示: 搏击俱乐部1999[1080p]。mp4,搏击俱乐部1999[1080p]。srt,搏击俱乐部1999[1080p]。nfo,poster.jpg,Trailer.mp4

我做了这个,但我遇到了这些:

我无法将混乱的拖车文件重命名为just traile.mp4。 无法跳过重命名Trailer.mkv,它将重命名为文件夹名。 请帮忙,非常感谢

@echo off
setlocal EnableDelayedExpansion


cd /D "%~DP0"
echo BASE FOLDER: %cd%
set n=0
for /D %%a in (*) do (
set /A n+=1
cd "%%a"
echo ==================================================================
echo Processing folder: %%a
set movieName=%%~a

except (*Trailer.mp4)
except (*Trailer.mkv)

for %%b in (*.avi *.mp4 *.mkv) do (
   ren "%%~b" "!movieName!%%~Xb"
   echo Movie file "%%b" renamed to "!movieName!%%~Xb"


for %%b in (*.srt *.sub *.ass *.ssa *.idx) do (
   ren "%%~b" "!movieName!%%~Xb"
   echo File "%%b" renamed to "!movieName!%%~Xb"
)

for %%b in (*.jpeg *.jpg *.png) do (
   ren "%%~b" "!poster.jpg"
echo File "%%b" renamed to "!poster.jpg~Xb"
)

for fname in *Trailer; do
   newname=`echo "$fname" | sed 's/Trailer/Trailer/g'`
   sed 's/Trailer/Trailer/g' "$fname" >"$newname"
done

cd ..

)
echo ==================================================================
也许这会有帮助:

@echo off
setlocal EnableDelayedExpansion

cd /D "%~dp0"
echo BASE FOLDER: %cd%
set n=0
for /D %%a in (*) do (
    set /A n+=1
    PushD "%%a"
    echo ==================================================================
    echo Processing folder: %%a
    set "movieName=%%~a"

    rem except (*Trailer.mp4),except (*Trailer.mkv)
    for /f "delims=" %%b in (
      'dir /B *.avi *.mp4 *.mkv ^|findstr /i /v "Trailer" '
    ) do (
       ren "%%~b" "!movieName!%%~Xb" && ^
       echo Movie file "%%b" renamed to "!movieName!%%~Xb"
    )

    for %%b in (*.srt *.sub *.ass *.ssa *.idx) do (
       ren "%%~b" "!movieName!%%~Xb"&& ^
       echo File "%%b" renamed to "!movieName!%%~Xb"
    )

    for %%b in (*.jpeg *.jpg *.png) do (
        ren "%%~b" "poster%%~xb" && ^
        echo File "%%b" renamed to "poster%%~xb"
    )

    for /f "delims=" %%b in (
      'dir /B "*trailer*" '
    ) do (
       ren "%%~b" "Trailer%%~Xb" && ^
       echo Movie file "%%b" renamed to "Trailer%%~Xb"
    )
    PopD
)
echo ==================================================================

使用更好的编辑器来正确缩进代码。的第一个没有右括号。最后一个问题是bash代码不清楚。sed将一个单词替换为自身两次?要查找预告片,可以使用诸如*traile*.avi、*traile*.mp4、*traile*.mkv之类的模式,假设它们的文件名中都有单词traile;无论如何,您应该首先搜索它们并将它们重命名为traile.*;然后您可以处理电影文件,这些文件都是未命名的预告片。*;如果/我不是%%~nb==拖车,则放置。。。进入第一个循环以排除已重命名的文件预告片。*…非常感谢您的回复。它正在工作,但是,我尝试了一个场景,其中有两个文件的文件名上有不同文件扩展名的拖车,它可以按预期的方式执行,但将第二个拖车重命名为文件夹名,即电影名。请您编辑批处理文件,以便在类似的情况下,mkv和mp4版本的拖车文件都被重命名,而不是以文件夹名称命名。。。非常感谢您的积极响应。在findstr/v的第一个示例中,仅排除了尾部带有文字点和以m开头的扩展名的文件,已更改。现在,任何位置的任何文件(包括拖车)都被排除在外,lateron将其缩短为仅拖车。非常感谢。。。。现在我有一个非常强大的重命名工具在手。。。祝福你,兄弟。祝你有一个美好的一天……嗯,得到感谢的最好方式是接受回答和/或投票。