找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27488|回复: 10

[文本处理] 批处理如何尋找文件內容進行改名?

[复制链接]
发表于 2013-1-3 09:24:00 | 显示全部楼层 |阅读模式
各位大俠你們好

請問如何尋找文件內容, 為文件改名
如附件
先尋找: "sup: " 後 5 個字, 底線
然後加上 "Number : " 後 6 個字, 底線
再加上 "Location   :     "  後4 個字

改完後檔案名如下 32569_259197_hk32

這些字眼不一定在固定位置, 但一定出現在文件中且不重覆,  
我是新手, 只懂用 IF %%M#== # SET =!S:~ 找出同位置的字眼
請問有辦法嗎? 謝!
发表于 2013-1-3 10:26:32 | 显示全部楼层
本帖最后由 tmplinshi 于 2013-1-3 11:07 编辑

需要下载 sed: http://code.google.com/p/gnu-on-windows/downloads/list
  1. @echo off
  2. setlocal

  3. set file="file A.txt"

  4. for /f "tokens=1,2 delims=:" %%a in (
  5.     ' more %file% ^| sed -r -n "s/(^|[ ]*)(SUP|Number|Location)[ ]*:[ ]*([^ ]+)/\n:\2:\3/gip" ^| sed -n "s/^://p" '
  6. ) do (
  7.     set %%a=%%b
  8. )

  9. ren %file% %sup%_%Number%_%Location%.txt
复制代码
 楼主| 发表于 2013-1-3 10:46:08 | 显示全部楼层
本帖最后由 nickl 于 2013-1-3 10:49 编辑

先感謝
但不知為何運行後, 名字改為 __ 而已

請問能只用 bat 代碼處理嗎? 謝
发表于 2013-1-3 10:53:38 | 显示全部楼层
本帖最后由 tmplinshi 于 2013-1-3 11:05 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set file="file A.txt"

  4. for /f "tokens=*" %%a in (' more %file% ') do (

  5.     set str=%%a
  6.    
  7.     for %%i in (SUP Number Location) do (
  8.         set str=!str:*%%i=%%i!
  9.         set str=!str: =!
  10.         
  11.         if "!str:%%i:=!" neq "!str!" (
  12.             set %%i=!str:*:=!
  13.         )
  14.     )
  15.    
  16. )

  17. ren %file% %SUP%_%Number%_%Location%.txt
复制代码
发表于 2013-1-3 10:59:43 | 显示全部楼层
本帖最后由 tmplinshi 于 2013-1-3 11:08 编辑
先感謝
但不知為何運行後, 名字改為 __ 而已

請問能只用 bat 代碼處理嗎? 謝
nickl 发表于 2013-1-3 10:46



哦。忘了,你的文件编码是 UTF-16 LE,我运行批处理之前先改了编码。

现在可以了,已修改 2 楼和 4 楼的代码。
 楼主| 发表于 2013-1-3 11:14:54 | 显示全部楼层
回复 5# tmplinshi

感謝, 能用了

有一個問題, 請問能不指定檔名, 而是更改資料夾內所有 txt 檔案嗎?
因有大量類似檔案要進行改名, 感激萬分!
发表于 2013-1-3 11:27:26 | 显示全部楼层
回复  tmplinshi

感謝, 能用了

有一個問題, 請問能不指定檔名, 而是更改資料夾內所有 txt ...
nickl 发表于 2013-1-3 11:14
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. for %%a in (*.txt) do (
  4.     set file="%%a"

  5.     for /f "tokens=*" %%a in (' more !file! ') do (
  6.         set str=%%a
  7.         
  8.         for %%i in (SUP Number Location) do (
  9.             set str=!str:*%%i=%%i!
  10.             set str=!str: =!
  11.             
  12.             if "!str:%%i:=!" neq "!str!" (
  13.                 set %%i=!str:*:=!
  14.             )
  15.         )
  16.         
  17.     )
  18.    
  19.     ren !file! !SUP!_!Number!_!Location!.txt
  20. )
复制代码
 楼主| 发表于 2013-1-3 12:16:22 | 显示全部楼层
回复 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_

抱歉現在才發現文件有這樣的問題..
無論如何, 感激你的幫助!
发表于 2013-1-3 12:28:59 | 显示全部楼层
本帖最后由 tmplinshi 于 2013-1-3 12:32 编辑

回复 8# nickl
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. for %%a in (*.txt) do (
  4.     set file="%%a"
  5.     for %%i in (SUP Number Location) do set %%i=#

  6.     for /f "tokens=*" %%a in (' more !file! ') do (
  7.         set str=%%a
  8.         
  9.         for %%i in (SUP Number Location) do (
  10.             set str=!str:*%%i=%%i!
  11.             set str=!str: =!
  12.             
  13.             if "!str:%%i:=!" neq "!str!" (
  14.                 set %%i=!str:*:=!
  15.             )
  16.         )
  17.         
  18.     )
  19.    
  20.     ren !file! !SUP!_!Number!_!Location!.txt
  21. )
复制代码

评分

参与人数 1技术 +1 收起 理由
nickl + 1 problem solving

查看全部评分

 楼主| 发表于 2013-1-3 14:13:38 | 显示全部楼层
回复 9# tmplinshi

成功了, 謝版主
 楼主| 发表于 2013-1-4 13:29:17 | 显示全部楼层
請問有甚麼情況會出現命令引數過多的錯誤信息?

不知為何我運行上述 bat 檔案, 大部分電腦也能正常運動
但有一部卻出現命令引數過多的錯誤信息, 請問有甚麼情況會出現這個報錯呢? 有甚麼解決方法?
謝!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 02:43 , Processed in 0.020555 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表