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

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

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

回复 1# nnszuo


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

TOP

  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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# Batcher


我是新手不明白  more +%%i "%~f0" 的意思,可以解释一下么

TOP

回复 4# nnszuo


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

%~f0 是指批处理自身这个文件
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

回复 5# Batcher
感谢讲解,现正学习中,回去看看帮助

TOP

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

TOP

嗯.我那看起来太乱

TOP

返回列表