Board logo

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

作者: nnszuo    时间: 2014-10-11 11:59     标题: 【已解决】怎样把一个标签的内容复制成一个新的批处理?

本帖最后由 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
复制代码

作者: cjiabing    时间: 2014-10-11 13:41

回复 1# nnszuo


    首先你要区分这段内容与其他代码的区别,找到具体的特征标记,找到开始点和结束点,这样批处理才能认识。
    笼统地说,只要字符前面有一个冒号都算标签了。
    但标签后面的内容从哪里结束?一般标签的结束用的比较多的是goto :eof、pause、exit等,但不是绝对,具体问题具体分析。
所以,答案很简单:
1、直接find到这个标签名“:”——more和for就可以了。
2、将此标签名后面的内容全部写入新建的批处理。FOR处理就可以。
3、根据这段代码的特征判断结束点。比如,以“goto :eof”结束的直接if  /i   "%%a"=="goto :eof"  跳出写入。
作者: Batcher    时间: 2014-10-11 16:10

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

作者: nnszuo    时间: 2014-10-20 13:32

回复 3# Batcher


我是新手不明白  more +%%i "%~f0" 的意思,可以解释一下么
作者: Batcher    时间: 2014-10-20 14:19

回复 4# nnszuo


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

%~f0 是指批处理自身这个文件
作者: nnszuo    时间: 2014-10-20 15:17

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

作者: nnszuo    时间: 2014-10-20 15:22

回复 5# Batcher
感谢讲解,现正学习中,回去看看帮助
作者: DAIC    时间: 2014-10-20 17:20

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

作者: nnszuo    时间: 2014-10-23 09:41

嗯.我那看起来太乱




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