2013-12-10 25 views
-1

我需要一個腳本來完成這個批量重命名文件名。批處理文件在指定的目錄中匹配和重命名多個文件名

C:\media\tv\How.I.Met.Your.Mother.S09E06.REPACK.HDTV.x2 
C:\media\tv\The.Big.Bang.Theory.S07E05.HDTV.x26 
C:\media\tv\The.Blacklist.S01E01.HDTV.x26 

C:\media\tv\How I Met Your Mother S09E06 
C:\media\tv\The Big Bang Theory S07E05 
C:\media\tv\The Blacklist S01E01 

我已經有一個腳本:

dir /o:n/b "" >>Movie.txt 

拉和電視文件夾的目錄,並把它變成一個txt文件。我只需要或多或少地修改庫存(手動)並傳播更改。 類似於在列A中找到的內容,將其更改爲B列

A ............................... ............乙

name.crap.cluTTER .............名

庫存......... .....................更改庫存

TIA爲您提供幫助。

+0

文件管理器'總Commander'有一個'多rename'工具,它可以跨文件樹工作,並刪除/修改文本,也有'reg-exp'支持,如果你可以使用它。 – foxidrive

回答

0
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /f "delims=" %%a IN (
q20492473.txt 
) DO (
SET fname=%%~nxa 
CALL :vername 
IF DEFINED fname (ECHO REN "%%a" "!fname!" 
) ELSE (ECHO could NOT RENAME "%%~nxa") 
) 
GOTO :EOF 
:vername 
FOR /f %%i IN ("%fname%") DO SET fname=%%~ni&SET ext=%%~xi 
IF NOT DEFINED ext SET "fname="&GOTO :EOF 
IF /i NOT "%ext:~0,2%%ext:~4,1%%ext:~7,1%"==".SE" GOTO vername 
SET num=9%ext:~2,2%%ext:~5,2% 
FOR %%i IN (0 1 2 3 4 5 6 7 8 9) DO SET num=!num:%%i=! 
IF DEFINED num GOTO vername 
SET fname=!fname:.= ! %ext:~1% 
GOTO :eof 

這應該讓你開始。

q20492473.txt僅僅是我用作示例數據源文本的文件的名稱。毫無疑問,如果你願意的話,你可以用'dir /a-d/b'(包括單引號)替換它。


後續:

啊 - 這裏有兩個重要的詞 - 「嗒嗒」 和 「閃光」。 blah是至關重要的,因爲知道它是什麼將有助於調試(只有幾行 - 應該重命名的文件名,有些不應該)。

但主要的國旗飄揚是「閃光」,表示您正試圖通過單擊它從桌面運行此代碼。

我真的相信隱藏人們的鼠標可以迫使他們學習一些基礎知識。這也會導致許多瘋狂。

拿你的邪惡的鼠標,然後單擊開始>程序>附件,然後右鍵單擊「命令提示符」。選擇「發送到」和「桌面」。這會創建一個圖標,點擊後會打開啓蒙黑屏。有些人不會稱之爲「命令提示符」,但現實主義者稱它爲「DOS」,因爲它是MS-DOS的模擬器。關閉此窗口的常規方法是鍵入EXIT。您可以使用圖標的「屬性」選項卡設置使用的大小,字體和顏色。

您會看到提示;像

c:\somedirectory> 

它向您顯示當前或「已記錄的」驅動器和目錄。

您可以通過鍵入

x: 

其中x是您所需的新驅動器號更改記錄的驅動器。

您可以通過鍵入

cd "newdirectoryname" 

其中newdirectoryname是相對於你的當前目錄的目錄,如果它不具有\開始,如果它絕對改變登錄目錄。引號是可選的 - 但最好習慣使用它們,因爲它們必須用於名稱(包括文件名或目錄名)包含空格的某些命令。

您可以通過更改圖標屬性中的起始目錄來更改啓動目錄。

在提示符下,你可以通過鍵入

commandname /? 

所以

dir /? 

將顯示可用於dir命令的選項得到的命令(有時是模糊的,通常是不完整)文檔。

所以 - 我在我的V:驅動器(一個USB)上設置了一個名爲'q20492473'的目錄並打開了一個dos窗口。然後我輸入

v: 
cd "q20492473" 
dir 

,並得到這樣的響應:

Volume in drive V has no label. 
Volume Serial Number is 33C0-A799 

Directory of V:\q20492473 

12/12/2013 11:41 <DIR>   . 
12/12/2013 11:41 <DIR>   .. 
12/12/2013 11:47    570 q20492473.bat 
10/12/2013 20:24    416 q20492473.txt 
12/12/2013 11:45     0 How.I.Met.Your.Mother.S09E06.REPACK.HDTV 
12/12/2013 11:45     0 The.Big.Bang.Theory.S07E05.HDTV 
12/12/2013 11:45     0 The.Blacklist.S01E01.HDTV 
12/12/2013 11:45     0 How.I.Met.Your.Mother.Sx9E06.REPACK.HDTV 
12/12/2013 11:45     0 The.Big.Bang.Theory.S07Ey5.HDTV 
12/12/2013 11:45     0 Thisisjustanormalfile 
12/12/2013 11:45     0 noextension 
12/12/2013 11:45     0 The.Big.Bang.Theory.S27E05.HDTV 
12/12/2013 11:45     0 This.&.That.Theory.S27E05.HDTV 
10/12/2013 20:25    604 q20492473.bat.bak 
       12 File(s)   1,590 bytes 
       2 Dir(s) 51,678,806,016 bytes free 

你會注意到,q20492473.bat是在列表中。

這是它的內容 - 這是與上述相同列表,除了dir...已被替換

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /f "delims=" %%a IN (
    'dir /a-d/b' 
) DO (
SET fname=%%~nxa 
CALL :vername 
IF DEFINED fname (ECHO REN "%%a" "!fname!" 
) ELSE (ECHO could NOT RENAME "%%~nxa") 
) 
GOTO :EOF 
:vername 
FOR /f %%i IN ("%fname%") DO SET fname=%%~ni&SET ext=%%~xi 
IF NOT DEFINED ext SET "fname="&GOTO :EOF 
IF /i NOT "%ext:~0,2%%ext:~4,1%%ext:~7,1%"==".SE" GOTO vername 
SET num=9%ext:~2,2%%ext:~5,2% 
FOR %%i IN (0 1 2 3 4 5 6 7 8 9) DO SET num=!num:%%i=! 
IF DEFINED num GOTO vername 
SET fname=!fname:.= ! %ext:~1% 
GOTO :eof 

輸入

q20492473 

導致了響應

could NOT RENAME "q20492473.bat" 
could NOT RENAME "q20492473.txt" 
REN "How.I.Met.Your.Mother.S09E06.REPACK.HDTV" "How I Met Your Mother S09E06" 
REN "The.Big.Bang.Theory.S07E05.HDTV" "The Big Bang Theory S07E05" 
REN "The.Blacklist.S01E01.HDTV" "The Blacklist S01E01" 
could NOT RENAME "How.I.Met.Your.Mother.Sx9E06.REPACK.HDTV" 
could NOT RENAME "The.Big.Bang.Theory.S07Ey5.HDTV" 
could NOT RENAME "Thisisjustanormalfile" 
could NOT RENAME "noextension" 
REN "The.Big.Bang.Theory.S27E05.HDTV" "The Big Bang Theory S27E05" 
REN "This.&.That.Theory.S27E05.HDTV" "This & That Theory S27E05" 
could NOT RENAME "q20492473.bat.bak" 

因爲只有那些可以根據公式重命名的文件就是這些文件e報告行以ren開頭(批處理在很大程度上不區分大小寫)。其他人不適合,所以不被批次重命名。

我只是ECHO編輯REN命令用於驗證目的。刪除ECHO關鍵字之前RENq20492473.bat之前,重命名將嘗試批處理運行時。

最後,q20492473.bat(或任何你稱之爲的)不必駐留在當前目錄中。如果你喜歡,你可以運行它c:\wherever\you\have\stored\it\q20492473 - 如果它包含空格,則記住"quote the name"

當提供可執行文件名稱時,批處理將查看當前目錄,然後「沿着路徑」。直到找到可以解決的問題。 路徑是一系列; - 環境變量中包含的分離目錄名稱,奇怪地,路徑

你可以看到什麼樣的環境變量是通過使用

set 

或專門設置爲,因爲PATH是如此的重要,

path 

許多計量器創建一個特殊的目錄包含批處理文件和其他有用的工具。流行的名字包括C:\batchC:\belfry。通過在PATH中包含此目錄,則無論您當前的目錄如何,都可以運行batchname

方法來修改PATH可以在其他的反應被發現SO

+0

感謝您的腳本。是q20492473.txt文件,我有兩列更改? 如果不是,那麼我在哪裏輸入nameA nameB? 我對於閱讀這些東西還是很新的,所以不太確定用戶特定的東西在哪裏去了解什麼是參數。 感謝您對原始Q.的快速響應。 – user3086368

+0

編號文件名沒有意義 - 我只是將您的源文件數據複製到具有該名稱的文件。你把它命名爲'movie.txt'。我有一個批處理文件,可以創建一個框架和一個文本文件,並將它們加載到編輯器中。該文件的名稱是Q + SO問題編號。節省我很多時間。你可以用我在最後一段提到的dir命令替換那個文件名(包括單引號),然後它將(ECHO)重命名當前目錄中的文件。 – Magoo

+0

我把整個東西放到一個.txt文件中(交換'dir')。然後保存爲一個.bat在我想運行的目錄中。雙擊它時,cmd會閃爍:「可以不重命名」在目錄中每個文件重複一行。沒有什麼改變。事實上,這是一個外部高清因素?我保證我努力工作,但不是腳本精明。我還需要運行我的'dir'腳本嗎?或者是否將您的'dir'系列替換爲需要?還有,你說你的劇本輪詢清單並把它放在一個盒子裏讓我做出改變? TY耐心和幫助。 -Beau – user3086368