喜歡下載東西的人應(yīng)該很有體會,每次下載過來的文件名往往是比較有規(guī)律,但是那個規(guī)律卻不是你想要的規(guī)律,一個個去改名很麻煩,以下我總結(jié)了幾個常用的用于改名的批處理??梢蕴峤ㄗh,為了防止大家誤操作,建議大家先在新建文件夾嘗試成功后再對所需文件進(jìn)行修改,而不要急著馬上使用。
1、批量修改擴(kuò)展名
如把當(dāng)前文件夾的*.jpg全部改為*.rar。
@ECHO OFF
set listFile=list.tmp
del "%listFile%" /q 1>nul 2>nul
dir *.jpg /a /b>>"%listFile%"
FOR /F "tokens=*" %%a IN (
'more "%listFile%"'
) DO (
ren "%%a" "%%~na.rar"
)
del "%listFile%" /q 1>nul 2>nul
PAUSE
2、前面插入(例如要給所有歌曲名前面添加歌手的姓名)
@ECHO OFF
set listFile=list.tmp
del "%listFile%" /q 1>nul 2>nul
dir *.mp3 /a /b>>"%listFile%"
FOR /F "tokens=*" %%a IN (
'more "%listFile%"'
) DO (
ren "%%a" "歌手名%%a"
)
del "%listFile%" /q 1>nul 2>nul
PAUSE
3、后面添加(例如要給所有文件名后面添加一個網(wǎng)站的網(wǎng)址)
@ECHO OFF
set listFile=list.tmp
del "%listFile%" /q 1>nul 2>nul
dir *.mp3 /a /b>>"%listFile%"
FOR /F "tokens=*" %%a IN (
'more "%listFile%"'
) DO (
ren "%%a" "%%~naWWW WWW Com%%~xa"
)
del "%listFile%" /q 1>nul 2>nul
PAUSE
4、刪除文件名中的相同部分(例如刪除所有文件名中的歌手名)
@ECHO OFF
set deleteString=歌手名
set listFile=list.tmp
del "%listFile%" /q 1>nul 2>nul
dir *.mp3 /a /b>>"%listFile%"
FOR /F "tokens=*" %%a IN (
'more "%listFile%"'
) DO (
SETLOCAL ENABLEDELAYEDEXPANSION
set newFileName=%%a
set newFileName=!newFileName:%deleteString%=!
ren "%%a" "!newFileName!"
ENDLOCAL
)
del "%listFile%" /q 1>nul 2>nul
PAUSE
5、把文件名批量重命名為上級目錄名文件名的形式,例如d:\testPath\fatherPath\test.txt
就要重命名為fatherPathtest.txt,按照它的要求,我們可以分析一下,重命名的命令就是
ren 然后參數(shù)為ren 源文件名 新文件名,即上面的單個進(jìn)行重命名的話,那就是
ren "d:\testPath\fatherPath\test.txt" "fatherPathtest.txt"
既然知道了單個怎么命名,那批量也應(yīng)該能知道了吧。
我們知道在批處理中要批量處理的話,那肯定是少不了用for命令的。
現(xiàn)在我們把他的要求分解成兩部分
1、先用dir命令把所有要進(jìn)行重命名的文件的全路徑列出來發(fā)送到一個臨時(shí)的文本文件。
(供下面的for語句來讀取)
2、用for命令來讀取那個由dir命令生成的列表文件
a、在循環(huán)的過程中取得上級文件夾名
b、取得文件名
c、ren "源文件名" "上級文件夾名文件名"
上面就是偽代碼,接下來是批處理的實(shí)現(xiàn)代碼
@echo off
rem 生成臨時(shí)列表文件
dir d:\*.txt /s /a-d /b>>tmp.txt
rem 用for命令來讀取那個由dir命令生成的列表文件
FOR /F "tokens=*" %%a IN (
'more tmp.txt'
) DO (
rem 用Setlocal來啟用環(huán)境變量延遲功能
Setlocal EnableDelayedExpansion
rem 取得路徑包括了最后一個斜線\
set tempPath=%%~dpa
rem 把路徑中的最后一個斜線去掉
set tempPath=!tempPath:~,-1!
rem 在for命令中來擴(kuò)展取得路徑名
FOR %%A IN (
"!tempPath!"
) DO (
rem 擴(kuò)展取得上級目錄名
set filePath=%%~nA
rem 新的文件名為: 上級目錄名文件名
set new_name=!filePath!%%~nxa
ren "%%a" "!new_name!"
)
ENDLOCAL
)
rem 刪除臨時(shí)文件
del tmp.txt /q 1>nul 2>nul
pause
6、批量重命名,刪除文件名中相同的網(wǎng)站名。
昨天晚上在網(wǎng)上下載了一個壓縮包,里面是鄧麗君的歌曲,有50多首。那些歌曲的文件名的后面都加了那個網(wǎng)站的網(wǎng)址,看起來很不爽,大致為
歌曲www.xxx.com.mp3
所以我要把后面的www.xxx.com去掉
如果一個一個去的話,那必然很麻煩,所以就用批處理了,以下的批處理就是用來實(shí)現(xiàn)這個功能的。
因?yàn)槲疫@里www.xxx.com.mp3即最后的字符個數(shù)為14個,所以我只要取前面的文件名,不取這最后的14個,然后再后面加上.mp3就可以了。
即
%fileName:~0,-14%
這樣的形式就可以取到了。
上面是說原理,下面就是我的批處理,批處理代碼不是很多,我就不做詳細(xì)說明了,有興趣的朋友自己可以看看,也可以根據(jù)這個修改成自己需要的批處理。
@ECHO OFF
COLOR 0a
rem 調(diào)用初始化部分代碼
CALL :initEnv
rem 刪除臨時(shí)文件
CALL :delTmpFiles
rem 生成列表保存在臨時(shí)文件中(重命令時(shí)根據(jù)這個列表來進(jìn)行命名)
CALL :madeList>>%tmpFile%
rem 調(diào)用主模塊(讀取列表,進(jìn)行重命名)
CALL :main
rem 刪除臨時(shí)文件
CALL :delTmpFiles
PAUSE
EXIT
rem 初始化
:initEnv
set tmpFile=tmp.txt
GOTO :EOF
rem 刪除臨時(shí)文件
:delTmpFiles
del %tmpFile% /q 1>nul 2>nul
GOTO :EOF
rem 生成列表文件
:madeList
dir *.mp3 /a /b
goto :EOF
rem 主模塊(重命名)
:main
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=*" %%a IN (
'more %tmpFile%'
) DO (
set strTemp=%%a
ren "%%a" "!strTemp:~0,-14!.mp3"
)
GOTO :EOF
附:批處理讀取文本常用命令
讀取文本 用 for /f
文本名有空格 用 usebackq
文本內(nèi)容有空格并不要前面的 用 delims=]
擴(kuò)展到 路徑 和 文件名 用 %%~dpn1
例子:
for /f "delims=" %%i in (1.txt) do (
set "str=%%~dpi"
set str=!str:*]=!
echo !str:~,-1! %%~ni
)
pause
聯(lián)系客服