@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
關鍵字之前REN
在q20492473.bat
之前,重命名將嘗試批處理運行時。
最後,q20492473.bat
(或任何你稱之爲的)不必駐留在當前目錄中。如果你喜歡,你可以運行它c:\wherever\you\have\stored\it\q20492473
- 如果它包含空格,則記住"quote the name"
。
當提供可執行文件名稱時,批處理將查看當前目錄,然後「沿着路徑」。直到找到可以解決的問題。 路徑是一系列; - 環境變量中包含的分離目錄名稱,奇怪地,路徑。
你可以看到什麼樣的環境變量是通過使用
set
或專門設置爲,因爲PATH是如此的重要,
path
許多計量器創建一個特殊的目錄包含批處理文件和其他有用的工具。流行的名字包括C:\batch
和C:\belfry
。通過在PATH中包含此目錄,則無論您當前的目錄如何,都可以運行batchname。
方法來修改PATH可以在其他的反應被發現SO
文件管理器'總Commander'有一個'多rename'工具,它可以跨文件樹工作,並刪除/修改文本,也有'reg-exp'支持,如果你可以使用它。 – foxidrive