Board logo

标题: [文本处理] [已解决] 批处理怎样批量修改多个txt文件? [打印本页]

作者: hwylq    时间: 2010-3-18 15:33     标题: [已解决] 批处理怎样批量修改多个txt文件?

比如一个文件夹内的文件名是从0001----0999
例1:
Part Number   :  PCO2R0U48AF REV 0D
Operator Name :  001
Serial Number :  00001
DATE :  03-25-2010
TIME :  17:15:12
例2:
Part Number   :  PCO2R0U48AF REV 0D
Operator Name :  001
Serial Number :  00002
DATE :  03-25-2010
TIME :  17:15:12

这两个文件的文件名分别是0001  0002(是按从小到大的顺序排)
文件名和文件的Serial Number   后的数字一起变化,文件名从0001变成DK1011NAF01,文件中Serial Number后的0001也变成DK1011NAF01,下个文件名和文件中Serial Number 后的数字也变成DK1011NAF02,
一直变到 DK1011NAF09 的时候,下个文本中Serial Number中的数值就变成 DK1011NAF0A--------DK1011NAF0Z
以此类推:
DK1011NAF00-------DK1011NAF09;
DK1011NAF09-------DK1011NAF0A;
DK1011NAF0A-------DK1011NAF0Z;

DK1011NAF10-------DK1011NAF19;
DK1011NAF1A-------DK1011NAF1Z;

DK1011NAF20-------DK1011NAF29;
DK1011NAF2A-------DK1011NAF2Z;

DK1011NAF30-------DK1011NAF39;
DK1011NAF3A-------DK1011NAF3Z;

DK1011NAF90-------DK1011NAF9Z;
DK1011NAFA0-------DK1011NAFA9;

DK1011NAFA9-------DK1011NAFAA;
DK1011NAFAA-------DK1011NAFAZ;

DK1011NAFB0-------DK1011NAFBZ;

DK1011NAFZZ-------DK1011NAG00;

DK1011NAG00-------DK1011NAG09;
DK1011NAG0A-------DK1011NAG0Z;
一直变到
DK1011NAZZZ,结束

中间变化的字母不要 I,O , X

请问怎么实现,谢谢大家了

[ 本帖最后由 hwylq 于 2010-4-17 09:21 编辑 ]
作者: BatCoder    时间: 2010-3-18 15:51

有难度,字母的计算可以通过ASCII码,但是进位就比较麻烦了。
不知道还有没有其它思路。
作者: hwylq    时间: 2010-3-19 10:43

用第三方的也可以
作者: yangfengoo    时间: 2010-3-20 08:21

原帖由 hwylq 于 2010-3-18 15:33 发表
比如
Part Number   :  PCO2A0U04RM36
Operator Name :  001
Serial Number :  00169

CHANNEL:  1
Result: pass

我想把00169 换成 0287914EA1000001 并且在下一个文本后面的三位自动加一,当加到0287914 ...


ps:文件名也一样要变…………………………文件名这么变?
另外能不能贴个完整的文本样本?
作者: hwylq    时间: 2010-3-20 10:37

Part Number   :  PCO130W04RM36
Operator Name :  001
Serial Number :  00001

CHANNEL:  1
Result: pass

                           Attenuation
Frequency (MHZ)     Max Lim (dB)     Min Lim (dB)     Result (dB)
    0.6              -55.0             -150             -81.40
     1               -55.0             -150             -85.56
     3               -55.0             -150             -87.01
     5               -55.0             -150             -83.69
     7               -55.0             -150             -78.61
     9               -55.0             -150             -72.53
    11               -55.0             -150             -66.43
    13               -55.0             -150             -60.59
    15               -55.0             -150             -64.34
    17               -55.0             -150             -62.25

全文就是这样,文件名现在可以不用管
作者: yangfengoo    时间: 2010-3-20 11:50

  1. @echo off&setlocal enabledelayedexpansion
  2. set /a tt=0,tt3=0,x=1000
  3. set n=99&for %%a in (9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set /a n+=1&set _!n!=%%a
  4. for %%a in (*.txt) do (
  5.   set /a x+=1&if !x! gtr 1999 (call :zm) else (set xx=!x:~-3!)
  6.   for /f "tokens=1* delims=:" %%b in ('type "%%~a"^|findstr /n .*^&del  "%%~a"') do (if %%b==3 (echo.Serial Number :  0287914EA1000!xx!) else (echo.%%c))>>"%%a"
  7.    )
  8. pause
  9. :zm
  10. set /a b=100+(!tt!-26)/676,s=100+!tt3!,g=101+!tt!%%26
  11. set /a tt+=1,tt1=1+!tt!%%26
  12. if !tt1!==26 set /a tt2+=1,tt3=1+!tt2!%%26
  13. for /f "tokens=1-3" %%a in ("_!b! _!s! _!g!") do set xx=!%%a!!%%b!!%%c!
复制代码

作者: hwylq    时间: 2010-3-20 14:27

还是不对啊,没有变成字母,变化的顺序也没有对啊,不过还是要谢谢你
作者: yangfengoo    时间: 2010-3-20 15:25

要多于1000个文件才会出现字母!
0287914EA1000001 并且在下一个文本后面的三位自动加一,当加到0287914EA1000999的时候变成……

按你的要求 前999个文件是数字
作者: hwylq    时间: 2010-3-22 08:32

不好意思,上面写错了,是0---9,在从A---Z,直到ZZZ,和文件名一样的变。略过字母O, I, X

[ 本帖最后由 hwylq 于 2010-3-24 09:50 编辑 ]
作者: yangfengoo    时间: 2010-3-30 15:37

请用至少两个实例描述问题

偶依旧对你的要求不甚了解
作者: hwylq    时间: 2010-4-1 15:19

例1:
Part Number   :  PCO2R0U48AF REV 0D
Operator Name :  001
Serial Number :  00001
DATE :  03-25-2010
TIME :  17:15:12
例2:
Part Number   :  PCO2R0U48AF REV 0D
Operator Name :  001
Serial Number :  00002
DATE :  03-25-2010
TIME :  17:15:12

这两个文件的文件名分别是0001  0002(就从这开始转换)
文件名和文件的Serial Number   后的数字一起变化,文件名从0001变成DK1011NAF01,文件中Serial Number后的0001也变成DK1011NAF01,变成DK1011NAF02,直到DK1011NAF09,之后变成DK1011NAF0A,直到DK1011NAF0Z,中间变化的字母不要 I,O , X ,然后变成
DK1011NAF10,在变成DK1011NAF11,再到DK1011NAF19,在变成DK1011NAF1A,在到DK1011NAF1Z,
然后变成DK1011NAF20,在到DK1011NAF2Z,到DK1011NAF30,一直变成DK1011NAFZZ,在变化成DK1011NAG00,一直到DK1011NAZZZ就结束。

[ 本帖最后由 hwylq 于 2010-4-7 16:53 编辑 ]
作者: yangfengoo    时间: 2010-4-6 15:40

不知道 源文件 中 Serial Number :  后面的值怎么变?
Serial Number :  00009 下一个是Serial Number :  00010 还是 Serial Number :  0000A
作者: hwylq    时间: 2010-4-6 16:53

源文件 中 Serial Number :  后面的值怎么变?
Serial Number :  00009 下一个是Serial Number :  00010 还是 Serial Number :  0000A

源文件中Serial Number :   00009 下一个是00010,都是数字在变

[ 本帖最后由 hwylq 于 2010-4-6 17:07 编辑 ]
作者: caruko    时间: 2010-4-6 18:00

  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  3. set/a n=0,c=0,b=0,a=0
  4. for %%i in (%str%) do (set "_!n!=%%i"&&set/a n+=1)
  5. :loop
  6. set /a c+=1
  7. if %c% GEQ 36 set/a c=0,b+=1
  8. if %b% GEQ 36 set/a b=0,a+=1
  9. echo !_%a%!!_%b%!!_%c%!
  10. ping -n 1 127.1>nul
  11. goto :loop
复制代码
只输出后3位,其它功能你也没说的多清楚,自己加进去好了
数字 009-->00A     00Z-->010   01Z-->020   0ZZ-->100-->101

[ 本帖最后由 caruko 于 2010-4-6 18:04 编辑 ]
作者: FOR    时间: 2010-4-6 18:19

如果楼主能把问题描述清楚的话,我想论坛应该有很多人能解决你的问题的。
我是完全不懂楼主的意思。
作者: yangfengoo    时间: 2010-4-6 21:50

  1. @echo off&setlocal enabledelayedexpansion
  2. set n=100&for %%a in (0 1 2 3 4 5 6 7 8 9 A B C D E F G H J K L M N P Q R S T U V W Y Z) do set _!n!=%%a&set /a n+=1
  3. for %%a in (*.txt) do (
  4. for /f "tokens=2 delims=:" %%b in ('findstr /c:"Serial Number" "%%~a"') do set #=%%b&call :zm %%a
  5. )
  6. exit
  7. :zm
  8. set ss=%~n1
  9. if "!ss:~0,8!"=="DK1011NA" goto :eof
  10. for /l %%a in (2 1 7) do if not "!#:~%%a,1!"=="0" set #=!#:~%%a!&goto xx
  11. :xx
  12. set b=115
  13. set /a b=!b!+!#!/1089,s=100+(!#!/33)%%33,g=100+!#!%%33
  14. for /f "tokens=1-3" %%a in ("_!b! _!s! _!g!") do set xx=!%%a!!%%b!!%%c!
  15. for /f "tokens=1* delims=:" %%b in ('findstr /n .* "%~1"') do (if %%b==3 (echo.Serial Number :  DK1011NA!xx!) else (echo.%%c))>>"DK1011NA!xx!.txt"
  16. del "%~1"
复制代码

作者: terse    时间: 2010-4-7 03:32

  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3. for /l %%a in (0 1 35) do (
  4.     for /l %%b in (0 1 35) do (
  5.         for /l %%c in (0 1 35) do (
  6.         echo !str:~%%a,1!!str:~%%b,1!!str:~%%c,1!
  7. )))
  8. pause
复制代码

作者: terse    时间: 2010-4-7 10:49

  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3. for /l %%i in (0 1 46655) do (
  4.    set /a "m=%%i/36,c=%%i%%36,b=m%%36,a=(m/36)%%36"
  5.    for /f "tokens=1-3" %%a in ("!a! !b! !c!") do (
  6.    echo !str:~%%a,1!!str:~%%b,1!!str:~%%c,1!
  7. )
  8. )
  9. pause
复制代码

作者: hwylq    时间: 2010-4-10 08:27

谢谢大家的回答,谢谢 16楼的解答,

[ 本帖最后由 hwylq 于 2010-4-10 08:32 编辑 ]




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2