Board logo

标题: [文本处理] 批处理如何将第一个的内容写入第二个文本? [打印本页]

作者: 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楼 的帖子

  1. @echo off&setlocal enabledelayedexpansion
  2. set n=0
  3. for /f "delims=" %%i in (b.txt) do (set /a n+=1   
  4.     if !n! equ 3 (echo %%i>>输出文件.txt&&(for /f "delims=" %%a in (a.txt) do echo %%a )>>输出文件.txt) else echo %%i >>输出文件.txt
  5. )
  6. 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的话就是这样了
  1. kkkkkkkkkkkkjjkjjkj
  2. klklklklklkklk
  3. mm2
  4. nnn3
  5. aaaaa
  6. adadasdasdasda
  7. adsadsafsadfdsfgg
  8. dsada
  9. edwrdsfaf
  10. fsafsafsa
  11. dsdsaff
  12. gghgfhgfh
  13. dsadsa
  14. dsadsad
  15. fsafsafsaf
  16. kkjjjjjjjjj
复制代码
看见了么,变化就是nnn3在前面了
作者: bat2012    时间: 2011-2-22 02:10

老大,不行,
输出文件.txt 里面的10多段a.txt文件
作者: wc726842270    时间: 2011-2-22 02:23     标题: 回复 7楼 的帖子

看来你是有些不明白啊。假如说你想把第100行的MM2放在1。TXT的前面,那么就是
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=0
  3. for /f "delims=" %%i in (b.txt) do (set /a n+=1   
  4.     if !n! equ 100 (echo %%i>>输出文件.txt&&(for /f "delims=" %%a in (a.txt) do echo %%a )>>输出文件.txt) else echo %%i >>输出文件.txt
  5. )
  6. pause
复制代码
同理如果是1000行的话,就是这样
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=0
  3. for /f "delims=" %%i in (b.txt) do (set /a n+=1   
  4.     if !n! equ 1000 (echo %%i>>输出文件.txt&&(for /f "delims=" %%a in (a.txt) do echo %%a )>>输出文件.txt) else echo %%i >>输出文件.txt
  5. )
  6. 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

  1. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* 2.txt') do if %%a leq 3 echo %%b
  2. type 2.txt
  3. more +3 1.txt)>tmp.txt
  4. move tmp.txt 2.txt
复制代码

作者: wc726842270    时间: 2011-2-25 08:05

没有什么技术含量,如有不对请荐谅
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=0
  3. title 把特定文件插入特定文件指定行后 by 枫中残雪
  4. color 1a
  5. rem 与以前发的本质上没有什么区别,只不过没想到会是这样的结果,另外请看好要操作的文件
  6. rem 为了能更好的进行操作,本人并没有只提取行数。在显示出行数,你还可以与目标进行比对,看是否是自已想要的。
  7. echo.在操作之前请先阅读以下内容,可能会对你有些帮助。本人并不是专业人事如有错误,请荐谅。谢谢
  8. echo 1 ":"号前面的为行数
  9. echo 2 支持空行不会被删除,支持空行查找(此时不需要开启“用打印完全匹配的行”,但一定要输入一个空格,一个即可,多则无效)
  10. echo 3 行首为":"时可能不会被处理
  11. echo 4 "请输入标识的内容:"支持空格的输入(无论是否开启5,所以请看好再使用)
  12. echo 5 "请选择是否起用打印完全匹配的行",x(小写)为是,其它的都视为否
  13. echo 6 "在请指定要操作的行数"时,即使“不是想要的输入”在此"也许"也是有效的
  14. echo 7 本文并没有为退出而特别制做按键(得用第三方命令),想中途退出请点右上面的关闭
  15. set /p str=请选择是否起用打印完全匹配的行:
  16. if not "%str%" equ "x" (set "str="&&echo 您选择了不启用“用打印完全匹配的行”) else echo 您已成功开启“用打印完全匹配的行”。之后请进行下一步操作
  17. set /p a=请输入标识的内容:
  18. findstr /n%str%ic:"%a%" b.txt
  19. echo 从以上的观察应该找到其行数了吧!!!!
  20. set /p n=请指定要操作的行数:
  21. echo 正在操做中。请稍等……
  22. for /f "delims=" %%i in (b.txt) do (set /a c+=1   
  23.     if !c! equ %n% (echo.%%i>>输出文件.txt&&(for /f "delims=" %%a in (a.txt) do echo.%%a )>>输出文件.txt) else echo.%%i >>输出文件.txt
  24. )
  25. (for /l %%i in (0 10 800) do set /p=_%%i<nul&ping /n 127.1 >nul)&set /p=100%%<nul
  26. echo/
  27. pause
复制代码

作者: myzam    时间: 2011-2-25 13:21     标题: 变量的值传递

批处理是解释程序。它是解释一条执行一条。这和vbs的解释程序有点细微的差别。vbs需然也是解释程序,但是它要先差错,系统判断没错才开始解释执行,但批处理不预先差错。而是直接解释执行。
  要进行值的传递,首先要明白cmd的作用。cmd就是为批处理创建运行环境。所以要在批处理里进行值的传递,那我们把几个bat程序放到同一个cmd环境里运行,利用环境变量就可以完成值的传递。bat是解释程序它是传值不传地此的。解释程序都是这样的。而且解释程序是不可以转为exe文件的,exe文件是编译文件,它们和bat是不同类的。如果说在网上看到把bat转为了exe,那实际上是先把bat文件改编为编译文件,在转为exe的(这句话不是我发明的,是微软的专家徐鸣讲的)。
  知道了bat的运行就是在cmd创建的环境里面运行这个道理后,要在不同的bat文件间进行值的传递就很简单了
用这样一句话就可以了:
  1. @echo off
  2. echo   1111111
  3. set  tt="hello world"
  4. cmd /k  d:\test.bat
复制代码
test.bat文件的类容如下:
  1. echo "这是外部文件"%tt%
复制代码
运行一下就知道了。cmd/k就是创建bat的运行环境。

[ 本帖最后由 myzam 于 2011-2-26 22:58 编辑 ]




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