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

[文件操作] 【已解决】怎样把一个标签的内容复制成一个新的批处理?

[复制链接]
发表于 2014-10-11 11:59:54 | 显示全部楼层 |阅读模式
本帖最后由 nnszuo 于 2014-10-23 09:40 编辑

在论坛找了下复制自身某段内容到新的批处理文件时都要计算行数的,感觉这样比较麻烦,能不能把一个标签的下的所有内容复制成一个新的批处理
比如把下面标签的内容生成新的批处理
  1. :xin
  2. @echo off&setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /a-d /b c:\aaa') do (
  4.      set str=%%i
  5.      for /f "tokens=2 delims=. " %%a in ("%%i") do ren "c:\aaa\!str!" !str: %%a=!
  6. )
  7. pause
复制代码
发表于 2014-10-11 13:41:27 | 显示全部楼层
回复 1# nnszuo


    首先你要区分这段内容与其他代码的区别,找到具体的特征标记,找到开始点和结束点,这样批处理才能认识。
    笼统地说,只要字符前面有一个冒号都算标签了。
    但标签后面的内容从哪里结束?一般标签的结束用的比较多的是goto :eof、pause、exit等,但不是绝对,具体问题具体分析。
所以,答案很简单:
1、直接find到这个标签名“:”——more和for就可以了。
2、将此标签名后面的内容全部写入新建的批处理。FOR处理就可以。
3、根据这段代码的特征判断结束点。比如,以“goto :eof”结束的直接if  /i   "%%a"=="goto :eof"  跳出写入。
发表于 2014-10-11 16:10:37 | 显示全部楼层
  1. @echo off
  2. for /f "delims=:" %%i in ('findstr /n "^:DynamicScript$" "%~f0"') do (
  3.     more +%%i "%~f0" > new.bat
  4. )
  5. goto :eof

  6. :DynamicScript
  7. @echo off&setlocal enabledelayedexpansion
  8. for /f "delims=" %%i in ('dir /a-d /b c:\aaa') do (
  9.      set str=%%i
  10.      for /f "tokens=2 delims=. " %%a in ("%%i") do ren "c:\aaa\!str!" !str: %%a=!
  11. )
  12. pause
复制代码
 楼主| 发表于 2014-10-20 13:32:31 | 显示全部楼层
回复 3# Batcher


我是新手不明白  more +%%i "%~f0" 的意思,可以解释一下么
发表于 2014-10-20 14:19:42 | 显示全部楼层
回复 4# nnszuo


系统自带的帮助文档里面有讲解
more /?
    +n      从第 n 行开始显示第一个文件

%~f0 是指批处理自身这个文件
 楼主| 发表于 2014-10-20 15:17:56 | 显示全部楼层
回复 2# cjiabing
多谢提示,只要做个特定的标记就行
这是我刚做批处理有需要简化的地方没.或者其他类似的批处理,现在学习中需要更多实例
  1. goto :kaishi
  2. ::序号1
  3. str="将文字复制到剪贴板 我是文本1"
  4. Set ws = wscript.createobject("wscript.shell")
  5. ws.run "mshta vbscript:clipboardData.SetData("+""""+"text"+""""+","+""""&str&""""+")(close)",0,true
  6. createobject("scripting.filesystemobject").getfile(wscript.scriptfullname).delete

  7. ::序号2
  8. str="将文字复制到剪贴板 我是文本2"
  9. Set ws = wscript.createobject("wscript.shell")
  10. ws.run "mshta vbscript:clipboardData.SetData("+""""+"text"+""""+","+""""&str&""""+")(close)",0,true
  11. createobject("scripting.filesystemobject").getfile(wscript.scriptfullname).delete

  12. ::序号3
  13. str="将文字复制到剪贴板 我是文本3"
  14. Set ws = wscript.createobject("wscript.shell")
  15. ws.run "mshta vbscript:clipboardData.SetData("+""""+"text"+""""+","+""""&str&""""+")(close)",0,true
  16. createobject("scripting.filesystemobject").getfile(wscript.scriptfullname).delete

  17. ::序号4
  18. str="将文字复制到剪贴板 我是文本4"
  19. Set ws = wscript.createobject("wscript.shell")
  20. ws.run "mshta vbscript:clipboardData.SetData("+""""+"text"+""""+","+""""&str&""""+")(close)",0,true
  21. createobject("scripting.filesystemobject").getfile(wscript.scriptfullname).delete
  22. ::tingzhi



  23. :kaishi
  24. @echo off&setlocal enabledelayedexpansion
  25. set "ming="序号1-文本 1" "序号2-文本2" "序号3-文本3"  "序号4-文本4""
  26. set "lu="序号1-%~dp0" "序号2-c:" "序号3-d:"  "序号4-e:""
  27. for /f "skip=1 tokens=*" %%i in ('type "%~f0"') do (
  28. set ii=%%i
  29. if "%%i" == "::tingzhi" goto yun
  30. for %%a in (%ming%) do (
  31. set w=%%~a
  32. for %%b in (%lu%) do (
  33. set l=%%~b
  34. if "%%i%%i" == "::!w:~0,3!::!l:~0,3!" (
  35. set "s=!l:~4!!w:~4!.vbs"&&cd.>"!s!"
  36. )
  37. )
  38. )
  39. if not "!ii:~2,2!" == "序号" (@echo %%i>>!s!)
  40. )
  41. :yun
  42. pause>nul
复制代码
 楼主| 发表于 2014-10-20 15:22:41 | 显示全部楼层
回复 5# Batcher
感谢讲解,现正学习中,回去看看帮助
发表于 2014-10-20 17:20:51 | 显示全部楼层
回复 6# nnszuo


建议合理的使用缩进,比如:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "ming="序号1-文本 1" "序号2-文本2" "序号3-文本3"  "序号4-文本4""
  4. set "lu="序号1-%~dp0" "序号2-c:" "序号3-d:"  "序号4-e:""
  5. for /f "skip=1 tokens=*" %%i in ('type "%~f0"') do (
  6.     set ii=%%i
  7.     if "%%i" == "::tingzhi" goto yun
  8.     for %%a in (%ming%) do (
  9.         set w=%%~a
  10.         for %%b in (%lu%) do (
  11.             set l=%%~b
  12.             if "%%i%%i" == "::!w:~0,3!::!l:~0,3!" (
  13.                 set "s=!l:~4!!w:~4!.vbs"
  14.                 cd.>"!s!"
  15.             )
  16.         )
  17.     )
  18.     if not "!ii:~2,2!" == "序号" (
  19.         echo %%i>>!s!
  20.     )
  21. )
复制代码
 楼主| 发表于 2014-10-23 09:41:40 | 显示全部楼层
嗯.我那看起来太乱
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 02:50 , Processed in 0.010062 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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