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

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

[复制链接]
发表于 2015-8-28 06:53:59 | 显示全部楼层 |阅读模式
本帖最后由 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:42 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2015-8-28 10:05:36 | 显示全部楼层
感谢高手即时提供解决方法

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

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

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

再次感谢你对我第一个问题的解答:handshake
发表于 2015-8-28 10:27:04 | 显示全部楼层
倘若还没有能力修改代码,那么就直接发实际问题,不要绕,不是每个人解答的初衷都是热心
发表于 2015-8-28 10:51:16 | 显示全部楼层
本帖最后由 回家路上 于 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:38 | 显示全部楼层
list.xlsm里面有特殊字符,批处理开会是乱码
发表于 2015-8-28 11:09:08 | 显示全部楼层
批处理不支持直接处理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
复制代码

评分

参与人数 1技术 +1 收起 理由
尘丶 + 1 牛叉

查看全部评分

 楼主| 发表于 2015-8-28 23:37:47 | 显示全部楼层
多谢高手帮忙
问题已解决
下次我知道该怎么求助了~
THX
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 16:06 , Processed in 0.019455 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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