标题: [文本处理] 批处理如何将第一个的内容写入第二个文本? [打印本页]
作者: bat2012 时间: 2011-2-22 00:07 标题: 批处理如何将第一个的内容写入第二个文本?
回复: Batcher
一个脚本很大,有600多K,因文本不能加密,想分段发送并运行.
客户端随时可见的内容如下:
echo ┌──────────────────┐
set /p input=1 启动 2 重 3 del 4 exit 5 go 6 to │
echo │ │
echo │ │
echo │ │
echo └──────────────────┘
//下面的只有向服务端请求"选择内容"才发送执行
在下面这里只显示:
选择内容←--识别代码--→插入的内容↓
if %input%==1 start ......
.......
if %input%==6 goto .....
goto XXXX
:pauses
...........
以下仍以同样的方法分割
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
文本1的内容:
aaaaa
adadasdasdasda
adsadsafsadfdsfgg
dsada
edwrdsfaf
fsafsafsa
dsdsaff
gghgfhgfh
dsadsa
dsadsad
fsafsafsaf
文本2的内容:
kkkkkkkkkkkkjjkjjkj
klklklklklkklk
mm2
::在这里插入文本1的全部内容并保持原格式不变
"aaaaa
.....
fsafsafsaf"
:: 文本2原来的内容
nnn3
kkjjjjjjjjj
.......
[ 本帖最后由 bat2012 于 2011-2-22 22:49 编辑 ]
作者: rsent 时间: 2011-2-22 00:30
不知道是不是你需要的。
注意添加下路径,不然就是当前路径
copy a.txt+b.txt ab.txt
copy c:\a.txt+c:\b.txt c:\ab.txt
a.txt指的是前一个
b.txt指的是后一个
合并后也按前后顺序排列
作者: bat2012 时间: 2011-2-22 00:35
谢谢,你这个可能不行.
原意是将文本1的内容 插入文本的2的中间某段,也就是要求识别mm2
[ 本帖最后由 bat2012 于 2011-2-22 00:36 编辑 ]
作者: wc726842270 时间: 2011-2-22 01:41 标题: 回复 1楼 的帖子
- @echo off&setlocal enabledelayedexpansion
- set n=0
- for /f "delims=" %%i in (b.txt) do (set /a n+=1
- if !n! equ 3 (echo %%i>>输出文件.txt&&(for /f "delims=" %%a in (a.txt) do echo %%a )>>输出文件.txt) else echo %%i >>输出文件.txt
- )
- pause
复制代码
个人将你的1.txt保存为了a.txt
2.txt保存为了b.txt
有需要自已改一下吧
作者: bat2012 时间: 2011-2-22 01:51
请问一下:如何识别 文本的2的中间某段,也就是要求识别mm2 ,然后
插入文本2的mm2与
nnn3
之间
作者: wc726842270 时间: 2011-2-22 01:55 标题: 回复 5楼 的帖子
看看这一句{if !n! equ 3} 这里的3就是MM2的所在行,换一句话说如果是4的话就是这样了- kkkkkkkkkkkkjjkjjkj
- klklklklklkklk
- mm2
- nnn3
- aaaaa
- adadasdasdasda
- adsadsafsadfdsfgg
- dsada
- edwrdsfaf
- fsafsafsa
- dsdsaff
- gghgfhgfh
- dsadsa
- dsadsad
- fsafsafsaf
- kkjjjjjjjjj
复制代码
看见了么,变化就是nnn3在前面了
作者: bat2012 时间: 2011-2-22 02:10
老大,不行,
输出文件.txt 里面的10多段a.txt文件
作者: wc726842270 时间: 2011-2-22 02:23 标题: 回复 7楼 的帖子
看来你是有些不明白啊。假如说你想把第100行的MM2放在1。TXT的前面,那么就是- @echo off&setlocal enabledelayedexpansion
- set n=0
- for /f "delims=" %%i in (b.txt) do (set /a n+=1
- if !n! equ 100 (echo %%i>>输出文件.txt&&(for /f "delims=" %%a in (a.txt) do echo %%a )>>输出文件.txt) else echo %%i >>输出文件.txt
- )
- pause
复制代码
同理如果是1000行的话,就是这样- @echo off&setlocal enabledelayedexpansion
- set n=0
- for /f "delims=" %%i in (b.txt) do (set /a n+=1
- if !n! equ 1000 (echo %%i>>输出文件.txt&&(for /f "delims=" %%a in (a.txt) do echo %%a )>>输出文件.txt) else echo %%i >>输出文件.txt
- )
- pause
复制代码
也就是说只要知道MM2的行数,并把if !n! equ 3中的3换成相应的行数即可了,你要再不明白的话,我也不行了
但注意一点,我没有排除空行,1。TXT和2。TXT都没有
[ 本帖最后由 wc726842270 于 2011-2-22 02:26 编辑 ]
作者: bat2012 时间: 2011-2-22 02:30
请问:你是先识别b.txt的mm2 还是nnn3
假如mm2是文字 如:"我们是中国人",又怎么识别?
作者: wc726842270 时间: 2011-2-22 02:35 标题: 回复 9楼 的帖子
我是识别MM2的,也就是说是你所要擦入位置的前一行。
另外,我是说MM2的行数,并不是它的内容啊。这点我一直在说啊。
作者: bat2012 时间: 2011-2-22 02:42
假如mm2是文字 如:"我们是中国人",又怎么识别?
还有就是 我将一个完整的 g.txt 分割成很多段,分别是1~n.txt,是否用同样的办法?
作者: bat2012 时间: 2011-2-22 02:49
谢谢 太晚了 明天请教!
作者: bat2012 时间: 2011-2-22 18:29 标题: 回复 10楼 的帖子
老大,你这个方案不行,按行数插入,在前10行,是正常,超过10行后面就是乱的,.能不能用另外的方案,就是直接识别前面列举的如:"MM2"或"我们是中国人"等.因为这个文本有600多K,可能上万行,根本不能用人工来数行数.
作者: Batcher 时间: 2011-2-22 21:56 标题: 回复 11楼 的帖子
能否把所有的需求在顶楼一次性说清楚?
作者: bat2012 时间: 2011-2-24 19:06
老大们 没有答案吗?
作者: CrLf 时间: 2011-2-24 22:42
- (for /f "tokens=1* delims=:" %%a in ('findstr /n .* 2.txt') do if %%a leq 3 echo %%b
- type 2.txt
- more +3 1.txt)>tmp.txt
- move tmp.txt 2.txt
复制代码
作者: wc726842270 时间: 2011-2-25 08:05
没有什么技术含量,如有不对请荐谅- @echo off&setlocal enabledelayedexpansion
- set n=0
- title 把特定文件插入特定文件指定行后 by 枫中残雪
- color 1a
- rem 与以前发的本质上没有什么区别,只不过没想到会是这样的结果,另外请看好要操作的文件
- rem 为了能更好的进行操作,本人并没有只提取行数。在显示出行数,你还可以与目标进行比对,看是否是自已想要的。
- echo.在操作之前请先阅读以下内容,可能会对你有些帮助。本人并不是专业人事如有错误,请荐谅。谢谢
- echo 1 ":"号前面的为行数
- echo 2 支持空行不会被删除,支持空行查找(此时不需要开启“用打印完全匹配的行”,但一定要输入一个空格,一个即可,多则无效)
- echo 3 行首为":"时可能不会被处理
- echo 4 "请输入标识的内容:"支持空格的输入(无论是否开启5,所以请看好再使用)
- echo 5 "请选择是否起用打印完全匹配的行",x(小写)为是,其它的都视为否
- echo 6 "在请指定要操作的行数"时,即使“不是想要的输入”在此"也许"也是有效的
- echo 7 本文并没有为退出而特别制做按键(得用第三方命令),想中途退出请点右上面的关闭
- set /p str=请选择是否起用打印完全匹配的行:
- if not "%str%" equ "x" (set "str="&&echo 您选择了不启用“用打印完全匹配的行”) else echo 您已成功开启“用打印完全匹配的行”。之后请进行下一步操作
- set /p a=请输入标识的内容:
- findstr /n%str%ic:"%a%" b.txt
- echo 从以上的观察应该找到其行数了吧!!!!
- set /p n=请指定要操作的行数:
- echo 正在操做中。请稍等……
- for /f "delims=" %%i in (b.txt) do (set /a c+=1
- if !c! equ %n% (echo.%%i>>输出文件.txt&&(for /f "delims=" %%a in (a.txt) do echo.%%a )>>输出文件.txt) else echo.%%i >>输出文件.txt
- )
- (for /l %%i in (0 10 800) do set /p=_%%i<nul&ping /n 127.1 >nul)&set /p=100%%<nul
- echo/
- pause
复制代码
作者: myzam 时间: 2011-2-25 13:21 标题: 变量的值传递
批处理是解释程序。它是解释一条执行一条。这和vbs的解释程序有点细微的差别。vbs需然也是解释程序,但是它要先差错,系统判断没错才开始解释执行,但批处理不预先差错。而是直接解释执行。
要进行值的传递,首先要明白cmd的作用。cmd就是为批处理创建运行环境。所以要在批处理里进行值的传递,那我们把几个bat程序放到同一个cmd环境里运行,利用环境变量就可以完成值的传递。bat是解释程序它是传值不传地此的。解释程序都是这样的。而且解释程序是不可以转为exe文件的,exe文件是编译文件,它们和bat是不同类的。如果说在网上看到把bat转为了exe,那实际上是先把bat文件改编为编译文件,在转为exe的(这句话不是我发明的,是微软的专家徐鸣讲的)。
知道了bat的运行就是在cmd创建的环境里面运行这个道理后,要在不同的bat文件间进行值的传递就很简单了
用这样一句话就可以了:- @echo off
- echo 1111111
- set tt="hello world"
- cmd /k d:\test.bat
复制代码
test.bat文件的类容如下:复制代码
运行一下就知道了。cmd/k就是创建bat的运行环境。
[ 本帖最后由 myzam 于 2011-2-26 22:58 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |