Board logo

标题: [文件操作] 【已解决】BAT怎样批量修改文本文件固定行不同内容? [打印本页]

作者: ligan01    时间: 2015-8-28 06:53     标题: 【已解决】BAT怎样批量修改文本文件固定行不同内容?

本帖最后由 ligan01 于 2015-8-28 23:35 编辑

多个txt文件,需要修改这些文件中的特定一行,比如第5行中的内容,把这一行的内容按照列表中内容进行修改。

例子:
有多个文件
1.txt
2.txt
3.txt
....
同时有一个文本文件a.txt里面的内容如下
文件名   第5行修改为
1             a
2             b
3             c
....

需要把1,2,3等文件中的第5行,按照文本文件a.txt中进行修改,把1.txt中第5行改为a;
把2.txt中第5行改为b,把3.txt中第5行改为c........
作者: 尘丶    时间: 2015-8-28 08:44

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b *.txt') do (
  3.     for /f "skip=1 tokens=1,2 delims= " %%b in (a.txt) do (
  4.         set n=
  5.         if "%%a"=="%%b.txt" (
  6.    for /f "delims=" %%d in ('type %%b.txt') do (
  7.        set /a n+=1
  8.                if !n!==5 (echo;%%c>>%%b000.txt
  9.                ) else (echo;%%d>>%%b000.txt)
  10.         )
  11.              del "%%b".txt
  12.              ren "%%b000".txt "%%b".txt
  13.     )
  14.   )
  15. )
  16. pause
复制代码

作者: ligan01    时间: 2015-8-28 10:05

感谢高手即时提供解决方法

可不可以在麻烦下高手
我上面只是说的例子

附件中是我需要解决的具体事例中的三个例子
http://yunpan.cn/cmjPM4cVGHTuU

现在需要把
30015233710000.txt 需要替换第25行
30015281350000.txt 需要替换第24行
30015315810000.txt 需要替换第26行
这需要替换行的起始字符都是 “ PDAT”
替换的列表为list.xlsm,第一列为文件名,第二列为需要替换为的内容
这种情况下有解不?

再次感谢你对我第一个问题的解答:handshake
作者: pcl_test    时间: 2015-8-28 10:27

倘若还没有能力修改代码,那么就直接发实际问题,不要绕,不是每个人解答的初衷都是热心
作者: 回家路上    时间: 2015-8-28 10:51

本帖最后由 回家路上 于 2015-8-28 12:49 编辑

下次就直接描述要干嘛就行。要不楼上解析txt的不就白搞了。这样不好。

我电脑上没有Office,没有测,写一个练手而已。不好使就坐等。
  1. @set @n=0; /* & echo off&setlocal enabledelayedexpansion
  2. ::excel文件名称
  3. set "excelFile=list.xlsx"
  4. for /f "delims=" %%i in ('echo;%excelFile%^|cscript -nologo -e:jscript "%~0"') do set "%%i"
  5. for /f "delims=" %%i in ('dir /b *.txt') do (
  6. (for /f "usebackq delims=" %%a in ("%%i") do (
  7. set "line=%%a"
  8. if "!line:~0,4!" equ "PDAT" (echo;!_%%~ni!) else echo;%%a
  9. ))>"$%%i$"
  10. move /y "$%%i$" "%%i"
  11. )
  12. del /q "$*$"
  13. pause & exit/b & rem */
  14. function readExcel(filePath) {
  15. var oXL = new ActiveXObject("Excel.application");
  16. var oWB = oXL.Workbooks.open(filePath);
  17. oWB.worksheets(1).select();
  18. var oSheet = oWB.ActiveSheet;
  19. var rows = oSheet.usedrange.rows.count;
  20. var tempStr = "";
  21. for (var i = 1; i <= rows; i++) {
  22. if (oSheet.Cells(i, 1).value == "null" || oSheet.Cells(i, 2).value == "null")
  23. break;
  24. tempStr+= "_"+oSheet.Cells(i, 1)+"="+oSheet.Cells(i, 2)+"\r\n"
  25. }
  26. WSH.Echo(tempStr)
  27. oXL.Application.Quit();
  28. CollectGarbage();
  29. }
  30. var filePath = WScript.StdIn.ReadAll();
  31. readExcel(filePath);
复制代码

作者: 尘丶    时间: 2015-8-28 11:06

list.xlsm里面有特殊字符,批处理开会是乱码
作者: pcl_test    时间: 2015-8-28 11:09

批处理不支持直接处理Excel表格,先将表格另存为txt文本,如上图
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "usebackq tokens=1*" %%a in ("list.txt") do (
  3.     (for /f "usebackq delims=" %%i in ("%%a.txt") do (
  4.         set "str=%%i"
  5.         set "str=!str:  =!"
  6.         set "str=!str: =!"
  7.         if "!str:~,4!" equ "PDAT" (echo; %%b) else echo;%%i
  8.     ))>$
  9.     move $ "%%a.txt"
  10. )
  11. pause
复制代码

作者: ligan01    时间: 2015-8-28 23:37

多谢高手帮忙
问题已解决
下次我知道该怎么求助了~
THX





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