标题: [文本处理] 批处理如何尋找文件內容進行改名? [打印本页]
作者: nickl 时间: 2013-1-3 09:24 标题: 批处理如何尋找文件內容進行改名?
各位大俠你們好
請問如何尋找文件內容, 為文件改名
如附件
先尋找: "sup: " 後 5 個字, 底線
然後加上 "Number : " 後 6 個字, 底線
再加上 "Location : " 後4 個字
改完後檔案名如下 32569_259197_hk32
這些字眼不一定在固定位置, 但一定出現在文件中且不重覆,
我是新手, 只懂用 IF %%M#== # SET =!S:~ 找出同位置的字眼
請問有辦法嗎? 謝!
作者: tmplinshi 时间: 2013-1-3 10:26
本帖最后由 tmplinshi 于 2013-1-3 11:07 编辑
需要下载 sed: http://code.google.com/p/gnu-on-windows/downloads/list- @echo off
- setlocal
-
- set file="file A.txt"
-
- for /f "tokens=1,2 delims=:" %%a in (
- ' more %file% ^| sed -r -n "s/(^|[ ]*)(SUP|Number|Location)[ ]*:[ ]*([^ ]+)/\n:\2:\3/gip" ^| sed -n "s/^://p" '
- ) do (
- set %%a=%%b
- )
-
- ren %file% %sup%_%Number%_%Location%.txt
复制代码
作者: nickl 时间: 2013-1-3 10:46
本帖最后由 nickl 于 2013-1-3 10:49 编辑
先感謝
但不知為何運行後, 名字改為 __ 而已
請問能只用 bat 代碼處理嗎? 謝
作者: tmplinshi 时间: 2013-1-3 10:53
本帖最后由 tmplinshi 于 2013-1-3 11:05 编辑
- @echo off
- setlocal enabledelayedexpansion
-
- set file="file A.txt"
-
- for /f "tokens=*" %%a in (' more %file% ') do (
-
- set str=%%a
-
- for %%i in (SUP Number Location) do (
- set str=!str:*%%i=%%i!
- set str=!str: =!
-
- if "!str:%%i:=!" neq "!str!" (
- set %%i=!str:*:=!
- )
- )
-
- )
-
- ren %file% %SUP%_%Number%_%Location%.txt
复制代码
作者: tmplinshi 时间: 2013-1-3 10:59
本帖最后由 tmplinshi 于 2013-1-3 11:08 编辑
先感謝
但不知為何運行後, 名字改為 __ 而已
請問能只用 bat 代碼處理嗎? 謝
nickl 发表于 2013-1-3 10:46
哦。忘了,你的文件编码是 UTF-16 LE,我运行批处理之前先改了编码。
现在可以了,已修改 2 楼和 4 楼的代码。
作者: nickl 时间: 2013-1-3 11:14
回复 5# tmplinshi
感謝, 能用了
有一個問題, 請問能不指定檔名, 而是更改資料夾內所有 txt 檔案嗎?
因有大量類似檔案要進行改名, 感激萬分!
作者: tmplinshi 时间: 2013-1-3 11:27
回复 tmplinshi
感謝, 能用了
有一個問題, 請問能不指定檔名, 而是更改資料夾內所有 txt ...
nickl 发表于 2013-1-3 11:14
- @echo off
- setlocal enabledelayedexpansion
-
- for %%a in (*.txt) do (
- set file="%%a"
-
- for /f "tokens=*" %%a in (' more !file! ') do (
- set str=%%a
-
- for %%i in (SUP Number Location) do (
- set str=!str:*%%i=%%i!
- set str=!str: =!
-
- if "!str:%%i:=!" neq "!str!" (
- set %%i=!str:*:=!
- )
- )
-
- )
-
- ren !file! !SUP!_!Number!_!Location!.txt
- )
复制代码
作者: nickl 时间: 2013-1-3 12:16
回复 7# tmplinshi
感謝!
運行後發現, 有些檔案因內容打錯字, (如 sup, 打成 spu)
會用了上一個檔案 (file A) 的 sup 後的內容更改(file b)檔名.
能做到如找不到 sup/number/location 就留下空白?
example: file C
SPU: 12345
number: 567899
location: HK32
以 file c 為例, 會改為 _567899_HK32
example2: file D
SUP: 12345
numb: 567899
location: HK32
以 file d 為例, 會改為 12345__HK32
example3: file E
SUP: 12345
number: 567899
loc: HK32
以 file e 為例, 會改為 12345_567899_
抱歉現在才發現文件有這樣的問題..
無論如何, 感激你的幫助!
作者: tmplinshi 时间: 2013-1-3 12:28
本帖最后由 tmplinshi 于 2013-1-3 12:32 编辑
回复 8# nickl - @echo off
- setlocal enabledelayedexpansion
-
- for %%a in (*.txt) do (
- set file="%%a"
- for %%i in (SUP Number Location) do set %%i=#
-
- for /f "tokens=*" %%a in (' more !file! ') do (
- set str=%%a
-
- for %%i in (SUP Number Location) do (
- set str=!str:*%%i=%%i!
- set str=!str: =!
-
- if "!str:%%i:=!" neq "!str!" (
- set %%i=!str:*:=!
- )
- )
-
- )
-
- ren !file! !SUP!_!Number!_!Location!.txt
- )
复制代码
作者: nickl 时间: 2013-1-3 14:13
回复 9# tmplinshi
成功了, 謝版主
作者: nickl 时间: 2013-1-4 13:29
請問有甚麼情況會出現命令引數過多的錯誤信息?
不知為何我運行上述 bat 檔案, 大部分電腦也能正常運動
但有一部卻出現命令引數過多的錯誤信息, 請問有甚麼情況會出現這個報錯呢? 有甚麼解決方法?
謝!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |