iT邦幫忙

0

如何大量更改檔名

jako 2010-07-19 16:35:1620116 瀏覽

請問要如何可以大量且方便的更改檔案名稱
例如:
abc_06_(10000001).txt ==>10000001.txt
abc_08_(10000002).txt ==>10000002.txt
因工作需要常要更改,請個位大大相助,謝謝。

看更多先前的討論...收起先前的討論...
tombo iT邦高手 1 級 ‧ 2010-07-21 11:53:04 檢舉
for /F %%a in ( 'dir abc*.txt /b' ) do (
	for /F "delims=() tokens=2" %%b in ( "%%a" ) do ren "%%a" "%%b.txt"
	)


這樣子更簡單
第一個迴圈抓原始檔名
第二個迴圈利用 delims 參數,把括號去掉,只截取括號內數字,這樣即便括號內的數字長度不一,也可以應付!
jako iT邦新手 2 級 ‧ 2010-07-21 12:10:22 檢舉
長見識了,謝謝。
蟹老闆 iT邦大師 1 級 ‧ 2010-07-21 12:23:09 檢舉
簡短有力讚
huangsb iT邦好手 1 級 ‧ 2010-08-15 12:36:55 檢舉
你的PowerShell可以改成如下:
dir|rename-item -newname { $_.name -replace 'abc_.._\(([^\)]+)\).txt','$1.txt'}

擅用正規運算式(Regular Expression),一行可抵千行。
jako iT邦新手 2 級 ‧ 2010-08-20 16:32:05 檢舉
感謝您的回答,給您一個讚
32
蟹老闆
iT邦大師 1 級 ‧ 2010-07-19 22:22:32
最佳解答

以下批次檔假設格式是固定的,如果檔名第八個字元非"("及第17個字元非")"則不會更名。

<pre class="c" name="code">
@ECHO OFF
SET Flag=0
SETLOCAL ENABLEDELAYEDEXPANSION
for /R C:\TEMP\ %%j in (*) do (
	SET FileName=%%~nxj
	IF "!FileName:~7,1!" EQU "(" (
	IF "!FileName:~16,1!" EQU ")" (
	REN %%~fj !FileName:~8,8!!FileName:~17,4! 2>null
	IF !ERRORLEVEL! EQU 0 ECHO %%~nxj 變更為 !FileName:~8,8!!FileName:~17,4!
	IF !ERRORLEVEL! EQU 1 (
		ECHO %%~nxj 未變更請檢查是否已有!FileName:~8,8!!FileName:~17,4! 檔案.
		ECHO 或是%%~fj已不存在.
		PAUSE
		ECHO.
)
)
)
IF "!FileName:~16,1!" NEQ ")" SET Flag=1
IF "!FileName:~7,1!" NEQ "(" SET Flag=1
IF !Flag! EQU 1 ECHO %%~nxj 的格式不符預期^^!
SET Flag=0
)
SETLOCAL DISABLEDELAYEDEXPANSION

蟹老闆真是太強了讚

jako iT邦新手 2 級 ‧ 2010-07-20 01:54:40 檢舉

高手,感謝,這就是我想要的。

14
shunyuan
iT邦研究生 1 級 ‧ 2010-07-19 16:37:27

用批次檔 .bat

然後建議用 UltraEditor 有 Block 編輯功能喔

快的話,建個批次檔,應該三分鐘可以搞定。

jako iT邦新手 2 級 ‧ 2010-07-19 16:42:43 檢舉

請問大大批次檔那段要如何寫~對UltraEditor並不熟,可以說明再細一下點嗎,謝謝。

14
plums
iT邦高手 1 級 ‧ 2010-07-19 17:58:56

如果只是純手動的話可以用免費的軟體,如FastStone Image Viewer等等

jako iT邦新手 2 級 ‧ 2010-07-19 18:13:33 檢舉

感謝您的回答,但我還是想要再更方便一點。

14
clcy
iT邦新手 3 級 ‧ 2010-07-19 20:04:53

到網路上找KoyRenamer這工具,它可以直接改名、文字加序號、取代部份文字等...
很好用...

20
逮丸逮丸
iT邦大師 1 級 ‧ 2010-07-19 20:47:57

UltraEdit 要錢,
Notepad++ 不用錢,
以下是我用 Notepad++ 的測試過程,
最後結果用如圖的設定操作:

就可做出 所要的 batch 檔的內容。

每組第一行是「尋找目標」
第二行是「取代成」
第三、四行是結果:

替換成 .txt 前面的全部

<pre class="c" name="code">(.*).txt
\1
abc_06_(10000001)
abc_08_(10000002)

以 _( 來區分,看第一部份是什麼:
由於 () 是 backreference 用的符號,
若要區別一般的括號符號,則要用 \( 、 \) 這是需要留意的地方。

<pre class="c" name="code">(.*)_\((.*)\).txt
\1
abc_06
abc_08

以 _( 區分,看第二部份是什麼:

<pre class="c" name="code">(.*)_\((.*)\).txt
\2
10000001
10000002

再加上 .txt

<pre class="c" name="code">(.*)_\((.*)\).txt
\2.txt
10000001.txt
10000002.txt

最外一層括號是 \1,並寫成 ren 的 batch 的格式:

<pre class="c" name="code">((.*)_\((.*)\).txt)
ren \1 \3.txt
ren abc_06_(10000001).txt 10000001.txt
ren abc_08_(10000002).txt 10000002.txt
jako iT邦新手 2 級 ‧ 2010-07-20 01:56:25 檢舉

非常感謝您的用心讚

10
daradiradara
iT邦新手 5 級 ‧ 2010-07-20 01:37:27

其實我覺得就慢慢按F2 然後 CTRL +C&V 複製貼上在刪刪減減就好了...這是最笨最簡單的方法了吧...

jako iT邦新手 2 級 ‧ 2010-07-20 01:49:29 檢舉

我也很想阿~但平均一週就有兩三百個檔名要改,老闆應該不是請我來ctrl+c跟ctrl+v,如果可以像大陽大一樣貼個一整年,那應該也不錯啦。

隔天在辦公室裡,我那複製&貼上的東東,用了一年...

patty0800 iT邦新手 5 級 ‧ 2010-07-22 00:41:18 檢舉

Adobe Bridge:超方便吔
只要檔案一次全框選,即可大量批次更名處理了,而且新檔名欄位多,任你設定.參考一下!
(sorry,這裏要如何貼圖阿?)

daniel418 iT邦新手 5 級 ‧ 2010-08-15 11:54:28 檢舉

用 Ultra Rename v2.7 這個程式應該可以解決你的困擾,超好用!

我要發表回答

立即登入回答