标题: [文本处理] 批处理怎样修改文本中的内容? [打印本页]
作者: hello70 时间: 2012-6-9 09:10 标题: 批处理怎样修改文本中的内容?
我在网上查了许多批处理代码,都不能解决问题。
修改a.txt中的多行内容:
#include "H:\形态40\生成数组、统计、显示可删除数\\生成数组的.h"
void 生成数组(int zongqishu,int kkkc,int cj[][20],int dj[][150])
改为:
#include "H:\形态40\生成数组、统计、显示可删除数1\1\生成数组的11.h"
void 生成数组11(int zongqishu,int kkkc,int cj[][20],int dj[][150])
修改后,要不改变其他地方的空行。
请高手指点,谢谢!
作者: canyuexiaolang 时间: 2012-6-9 10:27
你能否说一下修改规则,把a.txt全部内容都贴上来。主要是你这个毫无规律的修改。。。
作者: hello70 时间: 2012-6-9 10:42
a.txt全部内容:
#include "H:\多线程七星彩\形态40\生成数组、统计、显示可删除数\\生成数组的.h"
//#include "排序.h"
void 生成数组(int zongqishu,int kkkc,int cj[][20],int dj[][150])
{
//---------------------------------------------------------------------------------------------------------------------------
int n=30;//要预测的位数,本程序的有效位数是50-->98,确定一个位数,实际上确定了7个位数
//---------------------------------------------------------------------------------------------------------------------------
//dj[i][1]:表示1位数;dj[i][2]:表示2位数;dj[i][3]:表示3位数;dj[i][4]:表示4位数;dj[i][5]:表示5位数;dj[i][6]:表示6位数;dj[i][7]:表示7位数;
//dj[i][8]:表示1+2位;dj[i][9]:表示1+3位;dj[i][10]:表示1+4位;dj[i][11]:表示1+5位;dj[i][12]:表示1+6位;dj[i][13]:表示1+7位;
//dj[i][14]:表示2+3位;dj[i][15]:表示2+4位;dj[i][16]:表示2+5位;dj[i][17]:表示2+6位;dj[i][18]:表示2+7位;
//dj[i][19]:表示3+4位;dj[i][20]:表示3+5位;dj[i][21]:表示3+6位;dj[i][22]:表示3+7位;
//dj[i][23]:表示4+5位;dj[i][24]:表示4+6位;dj[i][25]:表示4+7位;
}
作者: hello70 时间: 2012-6-9 10:46
要求:
1.“void 生成数组"改为”void 生成数组11“
2."生成数组、统计、显示可删除数"改为"生成数组、统计、显示可删除数1"
3."\\"改为"\1\"
4."\\生成数组的.h"改为“\\生成数组的11.h"
作者: forfiles 时间: 2012-6-9 10:57
回复 4# hello70
条件4是不是应该放在条件3前面啊?
作者: apang 时间: 2012-6-9 11:03
- @echo off
- (for /f "tokens=1* delims=:" %%a in ('findstr /n ".*" a.txt') do (
- set "str=%%b"
- setlocal enabledelayedexpansion
- if not "!str!"=="" (
- set "str=!str:void 生成数组=void 生成数组11!"
- set "str=!str:生成数组、统计、显示可删除数=生成数组、统计、显示可删除数1!"
- set "str=!str:\\生成数组的.h=\\生成数组的1.h!"
- set "str=!str:\\=\1\!"
- )
- echo,!str!&endlocal
- ))>b.txt
复制代码
作者: hello70 时间: 2012-6-9 11:04
是的,而且不要改变文本的空行
作者: canyuexiaolang 时间: 2012-6-9 11:15
回复 7# hello70
- @echo off
- (for /f "tokens=1* delims=:" %%i in ('findstr /n .* a.txt') do (
- set "line=%%j"
- setlocal enabledelayedexpansion
- if "!line!"=="" (echo.!line!) else (
- set "line=!line:\\=\1\!"
- set "line=!line:显示可删除数=显示可删除数1!"
- set "line=!line:生成数组的.h=生成数组的11.h!"
- set "line=!line:void 生成数组=void 生成数组11!"
- echo.!line!
- endlocal
- )))>a_back.txt
- move a_back.txt a.txt
- pause
复制代码
空行保留了
作者: lunafay 时间: 2012-6-9 11:18
批处理不会
用powershell写了一个- Get-Content D:\a.txt | %{$_.replace("void 生成数组","void 生成数组11")}| %{$_.replace("生成数组、统计、显示可删除数","生成数组、统计、显示可删除数1")}| %{$_.replace('\\','\1\')} | %{$_.replace('\\生成数组的.h','\\生成数组的11.h')}|out-file d:\b.txt
复制代码
不知是否满足你的需求
作者: hello70 时间: 2012-6-9 11:24
谢谢各位老师,你们帮我解决问题了
作者: poter 时间: 2012-6-9 23:08
回复 8# canyuexiaolang
这个地方不是很理解,输出空行只要echo.就可以了嘛,为嘛还要用echo.!line!呢?
作者: Topgunguy 时间: 2012-6-23 01:41
各位版友大家好,我是新来的。
这帖实在是太精彩了,两星期前路过这里看到这帖,马上注册了ID,
感谢高手们不吝啬地分享代码。
之後小弟根据需要,加了一个回圈,但马上遇到问题,还请高手们指点一下。
我想把数个档案拉到bat档上开启,一次执数个的替换- @echo off
- setlocal enabledelayedexpansion
- ::批处理似乎最多只收九个参数
- for /l %%k in (1,1,9) do (
- call echo transform %%%%k
- (for /f "tokens=1* delims=:" %%i in ('findstr /n .* %%%%k') do (
- set "line=%%j"
- if "!line!"=="" (echo.!line!) else (
- set "line=!line:/G05.1 Q1=!"
- set "line=!line:(G80=G80)!"
- set "line=!line:.M09=.!"
- set "line=!line:/G05.1 Q0=!"
- echo.!line!
- endlocal
- )))>back.txt
- move back.txt %%%%k
- call echo %%%%k DONE
- )
- )
- pause
复制代码
执行後,没有产生替换,出现了九个奇怪的档案,
请问正确的格式应该要怎麽写呢?感谢~
附上原始档案与希望完成的档案
https://docs.google.com/open?id=0B_4U7laqmGGXVVJHZHpkbktyYWs
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |