捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
做一个绿色小巧的cxgrid快捷安装包
关键字:dos批处理,cxgrid快捷安装包
来 自:原创
平 台:Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:初级 完成时间:2009/4/17
发布者:dyydyy 发布时间:2009/4/18
编辑器:DELPHI7 语  种:简体中文
分 类:组件 下载浏览:10061/13072
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
TO 站长,
这里写了做了一个小东西,希望对大家有用,主要是有通用性,如果需要我上传cxgrid我再上传。

用了整整一天的时间,做了个cxgrid5绿色安装包。从昨天到现在,一下子摘抄了好几篇关于批处理的文件。一整天的时间,都在研究DOS批处理。哈哈,小有成果,把cxgrid5做成了绿色安装包。

因为想用一下cxgrid,而我原来下载的是一个完整安装包,exe 文件安装,比较麻烦,安装好后还要去汉化,修补bug,比较麻烦,而且安装目录很乱,并且生成了一些安装信息,并且system32下还有bpl安装文件,觉得很不爽。尽管花了一天时间做成绿色包,但效果还是比较好,包内全是一些pas,dpk等文本文件,而且做了汉化,修补了Bug,现在安装,只要执行包内install.bat文件,就全部安装好了,几秒钟就够了,以后安装就省事了,哈哈。原来的cxgrid5安装包有27M吧,现在把文件压缩后,去除掉help,demo,及一些二进制文件,只有4M多点了。当然如果不熟悉cxgrid使用的话,估计你有看help,demo的时间还不如上网找一个cxgrid教程,名字我忘了,比较好。这个批处理其实可以通用,用来安装其他的包也可以啊。

特将过程摘抄如下:

主要是怕以后批处理会淡忘,毕竟批处理还是用得少。

先睡觉了,明天来写。

睡觉起来了,接着干。

我将试着以delphi的概念来解释批处理
@echo off //关掉命令显示,最老的dos命令了
cls  //清屏
set delphiRoot=  //相当于var delphiroot:variant;不过批处理变量名是大小写敏感的!
FOR /F "tokens=3 delims=  " %%A IN ('REG QUERY "HKCU\SOFTWARE\Borland\Delphi\7.0" /v RootDir') DO (set delphiRoot=%%A) //1、首先将 reg query的结果循环放入%%a这个变量,/f 参数将某一命令执行结果作为循环范围,"tokens=3 delims=  "是什么意思呢?reg query结果是这样的,“HKEY_CURRENT_USER\SOFTWARE\Borland\Delphi\7.0
    RootDir    REG_SZ    D:\Delphi7\”  "delims= 空格" 即将上述结果用空格分离开,tokens=3是取第三个值,就是"d:\delphi7\"了,这样我们就取出delphi的安装目录了。如果rootdir有空格就比较麻烦了,那么用findstr(支持正则)来查找了,我想是这样的

FOR /F "tokens=1 delims=" %%A IN ('REG QUERY "HKCU\SOFTWARE\Borland\Delphi\7.0" /v RootDir') DO (echo %%A |findstr /i ".:.*" >nul &&set delphiRoot=%%A)
echo %delphiRoot:~25,100%
echo %delphiRoot%

这样用字符串截取就可以了

echo var |{显示var 作为后来命令的参数,管道} findstr{支持正则} /i{忽略大小写} ".:.*"{正则的expression,这里用来检验一个路径} &&{前面的语句执行了,就执行这句} commandline //这句有点perl的语句影子,没用过,曾看过,这种句子有点意思。

cls //这句是为了没有查到注册表值,产生错误,而且错误不能捕捉,用>nul 2>nul均不能屏蔽,所以清掉,好看点。

错误: 系统找不到指定的注册表项或值。

if "%delphiRoot%"=="" (
call :showmsg delphi正确安装了吗?初次安装必须运行一次DELPHI再来安装控件 //call子程序,子程序是标号语句组,语句组用()包住 ,相当于BEGIN...end;(cls 回车 cls)====begin cls;cls;end;子程序以 goto :eof返回,return
goto :OKFINAL //结束
)

set dBpl=%delphiRoot%Projects\Bplset cond=-b -le%dBpl% -ln%dBpl% -u%dBpl% //设置dcc32.exe的编译条件 

for /f "delims=" %%i in ('dir /b/ad/on') do call :searchdpk %%i //遍历本目录下的子目录,按名字排序,如下图

1dxtheme,2cxlibrary,3cxdata7,4cxeditor,5cxpagecontrol2,6cxgrid5

dir 命令请查看帮助 dir/? 这里用了只列出目录,并按名称排序



这样可以按顺序编译各个包
goto :OKFINAL

:showmsg
echo.
echo.
echo.
echo.
echo.
echo.
echo          ---------- 
echo          %1
echo          ----------
echo.
echo.
echo.
echo.
echo.
echo.
echo.
goto :eof

:searchdpk
echo %1|findstr /i "^[0-9].*">nul &&(//这里findstr 是说目录名是以数字开头的,其他的目录就处理了
pushd %1 //将当前目录压栈,并设当前目录为 %1{调用者传入},子程序的参数,分别是 %1...%9
for /f "delims=" %%a in ('dir /b/a-d/on "*.dpk"') do (//查找dpk文件,编译
      echo 正在编译 %%a......
      dcc32.exe %%a %cond% >nul
       rem 包含dcl串的的包将被安装
      echo %%a|findstr /i "^dcl">nul&&call :RegDCL %dBpl%%%~na.bpl      //如果dpk文件如dcl*.dpk ,则是设计包,注册他,就是写入注册表,见下面的子过程
      )
      call :addLibPath "%~f1"      //加入到搜索目录
popd )//,这里的括符,就是语句组,end; popd和 pushd相反
goto :eof //return

:addLibPath
set oldlib=
FOR /F "tokens=4 delims= " %%g IN ('REG QUERY "HKCU\Software\Borland\Delphi\7.0\Library" /v "Search Path"') DO (set oldlib="%%g")
echo %oldlib% | findstr /i %~1 >nul || ( set "oldlib=%oldlib:"=%;%~1" )// search path,没当前目录,就加进去。
echo %oldlib%
pause
reg delete "HKCU\Software\Borland\Delphi\7.0\Library" /v "Search Path" /f >nul
reg add "HKCU\Software\Borland\Delphi\7.0\Library" /v "Search Path" /t REG_SZ /d %oldlib% /f >nul

goto :eof

:RegDCL
echo 正在注册设计包  %1
reg add "HKCU\Software\Borland\Delphi\7.0\Known Packages" /v "%1" /t REG_SZ /d "cxComponents" /f >nul
::for /l %%a in (1,1,9000) do  rem 延时
goto :eof

:OKFINAL
echo.
echo 安装完成 ! ! !
echo.
pause 
exit

 

上面是全部批处理代码。

下面来逐行写批处理说明,希望各位能举一反三。只要稍做修改,就能做成通用安装包了。

 

@echo off
cls
set delphiRoot=
FOR /F "tokens=3 delims=  " %%A IN ('REG QUERY "HKCU\SOFTWARE\Borland\Delphi\7.0" /v RootDir') DO (set delphiRoot=%%A)
Cls
if "%delphiRoot%"=="" (
call :showmsg delphi正确安装了吗?初次安装必须运行一次DELPHI再来安装控件
goto :OKFINAL
)

set dBpl=%delphiRoot%Projects\Bplset cond=-b -le%dBpl% -ln%dBpl% -u%dBpl%

for /f "delims=" %%i in ('dir /b/ad/on') do call :searchdpk %%i
goto :OKFINAL

:showmsg
echo.
echo.
echo.
echo.
echo.
echo.
echo          ---------- 
echo          %1
echo          ----------
echo.
echo.
echo.
echo.
echo.
echo.
echo.
goto :eof

:searchdpk
echo %1|findstr /i "^[0-9].*">nul &&(
pushd %1
for /f "delims=" %%a in ('dir /b/a-d/on "*.dpk"') do (
      echo 正在编译 %%a......
      dcc32.exe %%a %cond% >nul
       rem 包含dcl串的的包将被安装
      echo %%a|findstr /i "^dcl">nul&&call :RegDCL %dBpl%%%~na.bpl      
      )
      call :addLibPath "%~f1"      
popd )
goto :eof

:addLibPath
set oldlib=
FOR /F "tokens=4 delims= " %%g IN ('REG QUERY "HKCU\Software\Borland\Delphi\7.0\Library" /v "Search Path"') DO (set oldlib="%%g")
echo %oldlib% | findstr /i %~1 >nul || ( set "oldlib=%oldlib:"=%;%~1" )
echo %oldlib%
pause
reg delete "HKCU\Software\Borland\Delphi\7.0\Library" /v "Search Path" /f >nul
reg add "HKCU\Software\Borland\Delphi\7.0\Library" /v "Search Path" /t REG_SZ /d %oldlib% /f >nul

goto :eof

:RegDCL
echo 正在注册设计包  %1
reg add "HKCU\Software\Borland\Delphi\7.0\Known Packages" /v "%1" /t REG_SZ /d "cxComponents" /f >nul
::for /l %%a in (1,1,9000) do  rem 延时
goto :eof

:OKFINAL
echo.
echo 安装完成 ! ! !
echo.
pause 
exit
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论5条
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表