[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何将第一个的内容写入第二个文本?

回复: 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 编辑 ]

变量的值传递

批处理是解释程序。它是解释一条执行一条。这和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 编辑 ]

TOP

没有什么技术含量,如有不对请荐谅
  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
复制代码
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

  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
复制代码

TOP

老大们 没有答案吗?

TOP

回复 11楼 的帖子

能否把所有的需求在顶楼一次性说清楚?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 10楼 的帖子

老大,你这个方案不行,按行数插入,在前10行,是正常,超过10行后面就是乱的,.能不能用另外的方案,就是直接识别前面列举的如:"MM2"或"我们是中国人"等.因为这个文本有600多K,可能上万行,根本不能用人工来数行数.

TOP

谢谢 太晚了 明天请教!

TOP

假如mm2是文字 如:"我们是中国人",又怎么识别?
还有就是 我将一个完整的 g.txt 分割成很多段,分别是1~n.txt,是否用同样的办法?

TOP

回复 9楼 的帖子

我是识别MM2的,也就是说是你所要擦入位置的前一行。
另外,我是说MM2的行数,并不是它的内容啊。这点我一直在说啊。
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

请问:你是先识别b.txt的mm2 还是nnn3
假如mm2是文字 如:"我们是中国人",又怎么识别?

TOP

回复 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 编辑 ]
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

老大,不行,
输出文件.txt 里面的10多段a.txt文件

TOP

回复 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在前面了
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

请问一下:如何识别 文本的2的中间某段,也就是要求识别mm2 ,然后
插入文本2的mm2与
nnn3
之间

TOP

返回列表