2017-06-13 112 views
0

美好的一天,批處理文件重命名特定文件,在多個文件夾中排除特定的文件

我有一個包含它的電影文件夾中的文件夾。在每個文件夾中,都有視頻文件,.srt用於字幕,jpg用於海報,最後還包括用於所述電影的預告片。

我想一個批處理文件,將:

  1. 重命名所有我的「約會專家.MKV .AVI」電影文件以及「污泥齡」到其文件夾的名稱(因爲我重新命名我的文件夾一樣這個「Fight Club(1999)[1080p],所以電影文件和.srt將是相同的名稱,當然它是擴展名)。

  2. 將所有* .jpeg * .jpg * .png重命名爲」poster .jpg或poster.png 「

  3. 重命名所有拖車文件只是」 Trailer.mp4。我把拖車每個電影的,只要你下載一個,我想刪除凌亂的文件名,如「---搏擊俱樂部 - #TBT預告 - 20世紀福克斯」,只是把它變成「Trailers.mp4

  4. 排除重命名那些已經有「拖車」文件名

每個文件夾名稱看起來就像這樣: 搏擊俱樂部(1999)[1080] .MP4,搏擊俱樂部(1999)[1080] .srt,Fight Club(1999)[1080p] .nfo,poster.jpg,Trailer.mp4。

我做了這個但我遇到了這些:

  1. 我不能亂拖車文件重命名爲只是「Trailer.mp4」。
  2. 無法跳過重命名「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 ================================================================== 
+0

使用更好的編輯器(如[記事本++](https://notepad-plus-plus.org/))正確縮進的代碼。第一個沒有右括號。最後一個是不清楚的bash代碼。用自己兩次代替一個詞? – LotPings

+0

要查找預告片,您可以使用'* Trailer * .avi','* Trailer * .mp4','* Trailer * .mkv'等模式,假設它們的文件名中都包含「Trailer」無論如何,你應該首先搜索它們,並將它們重命名爲「Trailer。*';那麼你可以處理電影文件,這些文件都是那些* not * named'Trailer。*';將'if/I not'放入%%〜nb「==」Trailer「(...)'到第一個循環中以排除已經重命名的文件'Trailer。*'... – aschipfl

回答

1

也許這將幫助:

@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 ================================================================== 
+0

非常感謝您的回覆。它正在工作,但是,我嘗試了一個場景,其中有兩個文件的文件名中帶有不同文件擴展名的「trailer」,它能夠按預期執行,但將第二個「預告片」重命名爲文件夾名稱的那個電影名稱。你能否請編輯批處理文件,以便在像這樣的情況下,兩個文件(mkv和mp4)版本的「預告片」都被重命名,而不是以文件夾名稱命名......非常感謝你的積極響應。 – Cha

+0

在「findstr/v」的第一個文件中,只有尾部爲「Trailer」的排除文件以文本點和以m開頭的擴展名進行了更改。包括任何位置的「Trailer」的任何文件現在都被排除在外,後來只縮短爲Trailer.ext – LotPings

+0

非常感謝您....現在我手上有一個非常強大的重命名工具...祝福你哥哥。願你有一個美好的一天... – Cha

相關問題