|
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 |
|
|
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 |
|
|
holucan
初级用户
积分 26
发帖 25
注册 2008-11-7
状态 离线
|
『第
3 楼』:
感谢分享,一个批处理文件,运行后会出现更多的小批处理文件,呵呵,这打包批处理还挺有好玩的。学习了。谢谢。
|
|
2008-11-22 17:24 |
|
|
523066680
银牌会员
SuperCleaner
积分 2362
发帖 1133
注册 2008-2-2
状态 离线
|
|
2008-11-23 09:16 |
|
|
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 |
|
|
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 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
|
2009-1-2 04:00 |
|
|
gudou
初级用户
积分 43
发帖 29
注册 2008-3-31
状态 离线
|
|
2011-1-4 11:57 |
|