中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [原创]批处理脚本打包工具 上一主题 | 下一主题
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『楼 主』:  [原创]批处理脚本打包工具

http://bbs.bathome.cn/viewthread.php?tid=2618&page=1&extra=

给当前批处理“打包”
代码如下:
@echo off
::批处理给当前其他批处理打包,通过修改的话还能扩展很多功能.利用了一些特效中的技巧.
::blog    hi.baidu.com/523066680
::made by 523066680@cn-dos.net 和bbs.bathome.cn
set pname=SetupBat.bat
for %%a in (*.bat) do (
    if not "%%a"=="%~nx0" (
      if not "%%a"=="%pname%" (call,set file="%%a" %%file%%)
    )
)
echo,@set file=%file%>"%pname%"
set "act="
::重定向 执行部分
for /f "delims= eol=" %%a in (%~snx0) do (
       if "%%a"=="::%pname% end" (goto :next)
       if defined act echo,%%a>>"%pname%"
       if "%%a"=="::%pname%" set act=act
)
:next
  ::- - - - - - -重定向内容 - - - - - - - -
  for %%a in (*.bat) do (
    if not "%%a"=="%~nx0" (
      if not "%%a"=="%pname%" (
          echo,::%%a>>"%pname%"
          type "%%a">>"%pname%"
          echo,>>"%pname%"
          echo,::%%a end>>"%pname%"
      )
    )
  )
  ::- - - - - - - - - - - - - - - - - - - -//重定向结束//
if not exist %~sdp0tempfolder (md %~sdp0\tempfolder)
move "%pname%" "%~sdp0tempfolder\"
exit
::SetupBat.bat
@echo off
for %%a in (%file%) do (call :setup %%~a)
exit
:setup
set "act="
for /f "delims= eol=" %%a in (%~nx0) do (
  if "%%a"=="::%* end" (goto :eof)
  if defined act echo,%%a>>"%*"
  if "%%a"=="::%*" errcommand>"%*" 2>nul&set act=act
)
::SetupBat.bat end
它可以干什么呢?可以给当前除本身以外的批处理打包(改改的话其他文本类文件也行)
生成一个SetupBat.bat 在tempfolder文件夹内
在另一个文件夹里双击它(以防出错),就会把之前“打包”的批处理全都解放出来,就像是解压缩一样。
以后我发多个批处理的帖子就不用上传拉压缩文件拉.把打包的批处理代码贴上去就可以了。
优点:使用上个帖子 批处理分段重定向 (节省echo版) 的原理,生成的时候不会存在echo,结合>>出现的特殊字符问题。
     不用慢慢测试然后加转义字符^了,更不用一长串地echo,x>x.x了
  1我的观点:
   a.当作备份使用,把自己经典的批处理打包起来,就合成了一个文件,然后可以很方便的存放,上传到网络上,
发表文章,这些都可以作为备份方式.
   b.以文本形式上传/发表的话就更容易复制/粘贴代码.
   c.可以通过打包再打包的方法实现分类打包功能,例如我自己做了一个:5230综合.bat 里面包含有三个子包裹
          5230应用类.bat   5230视觉类.bat   5230数值计算类.bat 这几个包裹打开后生成各自包括的批处理作品。
  2延展:这个版本的我没做太多功能,不过我认为还可以做成:
    a.由用户指定 生成某个文件(段落),生成在哪个文件夹里.
    b.如果拿来做坏事也是可怕的。
    c.利用这个批处理的性质,还可以很方便的给每个打包后的批处理增加一个文件头信息,例如制作者的信息
         或者把SetupBat.bat代码设置成可以由用户设置在文件的开头加上什么注释。
         也相当于完成一些批量的操作呢。
    d.可以改成对多类文本、脚本的。更深点,能完成这样的功能:
         把所有脚本、文本文件以及其位置记录起来,类似压缩目录树,再解压缩一样.而重定向并不会影响其他文件.
         当然用batch做这个事儿总怕在符号上有风险。
  …………………等等等等

以下是我的批处理集合打包的例子:(是对原来的帖子进行的修正……)
http://bbs.bathome.cn/viewthread.php?tid=1627&highlight=%2B523066680

[ Last edited by 523066680 on 2008-12-27 at 17:43 ]

   此帖被 +38 点积分       点击查看详情   
评分人:【 HAT 分数: +8  时间:2008-11-22 21:29
评分人:【 tireless 分数: +9  时间:2008-11-25 20:28
评分人:【 wxcute 分数: +4  时间:2008-12-25 17:27
评分人:【 moniuming 分数: +15  时间:2008-12-29 00:21
评分人:【 newxso 分数: +2  时间:2009-1-2 09:51




综合型编程论坛

我的作品索引
  
2008-11-22 16:50
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 2 楼』:  升级到脚本打包工具


@echo off
::脚本打包工具 打包文本类型的文件,空行会被去掉
::blog    hi.baidu.com/523066680
::made by 523066680@cn-dos.net 和bbs.bathome.cn

:a
echo,请正确输入。&echo,
set /p type="请输入将打包的脚本的格式 一种(如 bat,txt...): "
set /p name="包裹的名称(如 parcel ,则生成parcel.bat): "
if not exist "*.%type%" (echo,不存在该格式文件 &pause>nul &cls &goto :a)
if exist "tempfolder\%name%.bat" (echo,将对 tempfolder 文件夹中已存在的%name%.bat 进行覆盖 &pause)

set "tempname=thisistempfilename.x"
if not exist tempfolder (md tempfolder)
for %%a in (*.%type%) do (
    if not "%%a"=="%~nx0" (
      if not "%%a"=="%tempname%" (call,set file="%%a" %%file%%)
    )
)
echo,@set file=%file%>"%tempname%"
set "act="

::重定向 执行部分
for /f "delims= eol=" %%a in (%~snx0) do (
       if "%%a"=="::%tempname% end" (goto :next)
       if defined act echo,%%a>>"%tempname%"
       if "%%a"=="::%tempname%" set act=act
)
:next
  ::- - - - - - -重定向内容 - - - - - - - -
  for %%a in (*.%type%) do (
    if not "%%a"=="%~nx0" (
      if not "%%a"=="%tempname%" (
          echo,::%%a>>"%tempname%"
          type "%%a">>"%tempname%"
          echo,>>"%tempname%"
          echo,::%%a end>>"%tempname%"
      )
    )
  )
  ::- - - - - - - - - - - - - - - - - - - -//重定向结束//
ren "thisistempfilename.x" "%name%.bat"
move "%name%.bat" "tempfolder\%name%.bat"
echo,成功生成包裹%name%.bat 在 tempfolder 文件夹中
pause
exit

::thisistempfilename.x
@echo off
for %%a in (%file%) do (call :setup %%~a)
exit

:setup
set "act="
for /f "delims= eol=" %%a in (%~nx0) do (
  if "%%a"=="::%* end" (goto :eof)
  if defined act echo,%%a>>"%*"
  if "%%a"=="::%*" errcommand>"%*" 2>nul&set act=act
)
::thisistempfilename.x end
[ Last edited by 523066680 on 2008-12-27 at 17:42 ]

   此帖被 +6 点积分          点击查看详情   
评分人:【 BC 分数: +4  时间:2008-11-22 18:03
评分人:【 newxso 分数: +2  时间:2009-1-2 09:51




综合型编程论坛

我的作品索引
  
2008-11-22 16:52
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
holucan
初级用户





积分 26
发帖 25
注册 2008-11-7
状态 离线
『第 3 楼』:  

感谢分享,一个批处理文件,运行后会出现更多的小批处理文件,呵呵,这打包批处理还挺有好玩的。学习了。谢谢。

2008-11-22 17:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 4 楼』:  

帖子这么快就沉了!!!快起来



综合型编程论坛

我的作品索引
  
2008-11-23 09:16
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
go2up
新手上路





积分 1
发帖 1
注册 2008-11-23
状态 离线
『第 5 楼』:  

DOS下的程序执行效率是最高的了

2008-11-23 10:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 6 楼』:  给个例子


@set file="进度条细节版.bat" "动感曲线2.bat"
@echo off
for %%a in (%file%) do (call :setup %%~a)
exit
:setup
set "act="
for /f "delims= eol=" %%a in (%~nx0) do (
  if "%%a"=="::%* end" (goto :eof)
  if defined act echo,%%a>>"%*"
  if "%%a"=="::%*" errcommand>"%*" 2>nul&set act=act
)
::动感曲线2.bat
@echo off &setlocal enabledelayedexpansion
title code by 523066680@cn-dos.net  2008-12-23 娱乐 - 动感曲线2
for /l %%a in (1,1,20) do (set blank= !blank!)
set now=10
:a
set /a a=%random%%%10
if %a% gtr %now% (set "add=+" &set "str=#") else (set "add=-" &set "str=+")
:a1
   echo, !blank:~0,%now%!%str%
   ping -n 1 127.1>nul
   ping -n 1 127.1>nul
   if %now% equ %a% (goto :a)
   set /a now%add%=1
goto :a1
::慢慢地看,能看到旋转的效果。如果能看到,就会觉得很漂亮。
::当看到带子往一个方向旋转的时候,感觉很难再看成是往另一个方向...

::动感曲线2.bat end
::进度条细节版.bat
@echo off&setlocal enabledelayedexpansion&mode con cols=25 lines=1
title 进度条
set /a a=0
:a
set /a a+=1
for %%a in (▏ ▎ ▍ ▌ ▋ ▊ ▉) do (set /p=%%a<nul &ping -n 1 127.1>nul &ping -n 1 127.1>nul &ping -n 1 127.1>nul &set /p=   <nul)
set /p=█<nul
if %a% lss 10 (goto :a)
set /p= End<nul&pause>nul
::进度条细节版.bat end




综合型编程论坛

我的作品索引
  
2008-12-27 17:45
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by 523066680 at 2008-12-27 17:45:
[code]
@set file="进度条细节版.bat" "动感曲线2.bat"
@echo off
for %%a in (%file%) do (call :setup %%~a)
exit
:setup
set "act="
for /f "delims= e ...

无意发现一个BUG
保存成到一带空格文件名的.BAT文件运行,会提示找不到文件。




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2008-12-28 04:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 8 楼』:  Re 7楼

浏览下代码就知道为啥了,没加双引号,可能楼主时间太仓促了,呵呵。



2008-12-28 20:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by yishanju at 2008-12-28 04:24 AM:


无意发现一个BUG
保存成到一带空格文件名的.BAT文件运行,会提示找不到文件。

阁下没有看过我的分析...发在bathome了
为了减少某大段的代码,直接采用文件名做标签,你改了标签,找不到啊

这怎么叫bug呢? 所有代码都可以改,改了以后出错都叫bug么?

验证。请打包一个带空格的文件,再进行解包 看看



综合型编程论坛

我的作品索引
  
2008-12-31 18:09
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 10 楼』:  

谢谢分享,

2009-1-2 04:00
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
gudou
初级用户





积分 43
发帖 29
注册 2008-3-31
状态 离线
『第 11 楼』:  

这个没太看懂……哈哈

2011-1-4 11:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: