![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-26 00:34 |
共 47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [讨论][共同参与]批处理脚本的混合编程 |
| 可打印版本 3,164 / 15 |
| 第1楼 lxmxn | 发表于 2007-03-27 11:25 |
| 版主 发帖 4,938 积分 11,386 | |
|
[讨论][共同参与]批处理脚本的混合编程 To All: 在论坛上面看了不少的帖子,有不少是关于批处理与其它语言混合编程的例子,这样是很有意义的,一来可以提高大家学习bat脚本的兴趣,二来可以提高大家的混合编程能力。希望大家可以把自己关于bat的混合编程的心得拿出来和大家分享。 就我所知的批处理和其它语言混合编程的例子有:bat/vbs、bat/c#、bat/js、bat/html、bat/asm等等,而这学期,我们开始学习《Java程序设计语言》了,最基础的就是用javac.exe和java.exe这两个程序来编译、链接和运行java程序,最后再来做成可执行程序。 因为这两个程序都是在命令行运行的,所以我想到了直接利用bat来对java源程序进行编译链接,免得每次都要重复这个”建立编写java源文件(*.java),再来命令行用Javac *.java来编译*.java文件,然后再在命令执行生成的*.class文件”烦琐的过程。下面我就演示一下这个过程,其实很简单: Bat_Java.bat: 这样每次运行这个bat文件就可以直接编译运行java程序了,发现错误也可以直接修改"====="下面的"源文件"了。有Java环境的朋友可以试试。 最后,说明发这个帖子的目的吧:之所以发这个帖子,是为了抛砖引玉,让更多的人挖掘批处理和其它语言的混合编程,充分利用混合编程带给我们的便利和乐趣。 [ Last edited by lxmxn on 2007-3-26 at 10:35 PM ] |
|
| 第2楼 estar | 发表于 2007-03-27 11:39 |
| 中级用户 发帖 103 积分 346 | |
|
沙發,顶
|
|
| 第3楼 lxmxn | 发表于 2007-04-02 00:24 |
| 版主 发帖 4,938 积分 11,386 | |
|
怎么没什么人来看呢? 顶起来~~ |
|
| 第4楼 flyinspace | 发表于 2007-04-02 00:30 |
| 银牌会员 发帖 517 积分 1,206 | |
|
我不是不想看。只是不会vbs 啊。
只会c语言,c++语言。但又用不到这个批处理 中来 |
|
| 第5楼 bjsh | 发表于 2007-04-02 02:43 |
| 银牌会员 发帖 621 积分 2,000 | |
|
lxmxn兄
不是没人来看;是没人敢回啊 |
|
| 第6楼 axi | 发表于 2007-04-04 13:58 |
| 中级用户 发帖 93 积分 238 来自 GZ | |
|
关于混合编程用 more +n 方式把第 n+1 行及以下内容创建成一个文件的方法非常好用,例如:
@echo off more +10 %0>>html1.html exit 11111 22222 33333 44444 55555 66666 ... ... 以上方法可以把第11行及以下内容(即 55555 及以下)用 more +10 %0>>html1 生成一个 html 文件,如果想把中间内容(例如第8行至第9行)生成另一个 html 文件又如何呢? 用 echo 方法需考虑特殊符号问题,如果代码非常多则工作量大且容易出错。给每行加上标记,再用 findstr 提取带标记的行来创建另一个文件,此法应用在创建VBS上可行,标记符用 'xxx 就可以,生成的VBS文件中的标记符不影响VBS文件的执行,但在每行 html 代码上加标记有困难,标记将影响 html 文件的执行。如果用 for 加 more 方法可以提取中间内容,但由于变量的问题,可能无法提取较长或有特殊符号的行。有无好方法呢? [ Last edited by axi on 2007-4-4 at 01:00 PM ] |
|
| 第7楼 lxmxn | 发表于 2007-04-05 01:21 |
| 版主 发帖 4,938 积分 11,386 | |
可以用for+findstr来实现,稍微麻烦一些。 |
|
| 第8楼 lxmxn | 发表于 2007-04-05 01:42 |
| 版主 发帖 4,938 积分 11,386 | |
|
Re 6F: For example: |
|
| 第9楼 willsion | 发表于 2007-04-05 01:50 |
| 高级用户 发帖 312 积分 793 | |
|
都是高手,佩服,只有学习一下。
|
|
| 第10楼 axi | 发表于 2007-04-05 02:35 |
| 中级用户 发帖 93 积分 238 来自 GZ | |
|
To: lxmxn
此方法成功,例如: @echo off&Setlocal EnableDelayedExpansion echo This program is running... for /f "delims=" %%a in ('FINDSTR .* %0') do ( set /a a+=1 if !a! geq 9 if !a! leq 80 >>hta1.hta echo/%%a ) exit ::::::::::::::::::::: Hta1 ::::::::::::::::::: <html> <head> <title>磁盘空间查看器</title> <script language="vbscript"> window.resizeTo 473, 300 window.moveTo(screen.width-500)/2,(screen.height-243)/2 Sub Window_onLoad GetDiskSpace End Sub Sub GetDiskSpace Const HARD_DISK = 3 Const GB = 1073741824 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colDisks = objWMIService.ExecQuery _ ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "") strHTML = "<table border='1'>" strHTML = strHTML & "<tr>" strHTML = strHTML & "<td width=110px align=center><font size=2><b>" & "分区" & "</b></td>" strHTML = strHTML & "<td width=110px align=center><font size=2><b>" & "容量" & "</b></td>" strHTML = strHTML & "<td width=110px align=center><font size=2><b>" & "已用" & "</b></td>" strHTML = strHTML & "<td width=110px align=center><font size=2><b>" & "未用" & "</b></td>" strHTML = strHTML & "<td width=110px align=center><font size=2><b>" & "空闲" & "</b></td>" For Each objDisk In colDisks intFreeSpace = objDisk.FreeSpace/GB intTotalSpace = objDisk.Size/GB pctFreeSpace = intFreeSpace/GB / intTotalSpace/GB infFuLin = intTotalSpace-intFreeSpace DeviceID = objDisk.DeviceID strHTML = strHTML & "<tr>" strHTML = strHTML & "<td width=110px align=center>" & DeviceID & "</td>" strHTML = strHTML & "<td width=110px align=center><font color=#DB2C00>" & FormatNumber(intTotalSpace,1,-1,-1,0) & "</td>" strHTML = strHTML & "<td width=110px align=center><font color=#DB2C00>" & FormatNumber(infFuLin,1,-1,-1,0) & "</td>" strHTML = strHTML & "<td width=110px align=center><font color=#DB2C00>" & FormatNumber(intFreeSpace,1,-1,-1,0) & "</td>" strHTML = strHTML & "<td width=110px align=center><font color=#FF8000>" & FormatPercent(intFreeSpace/intTotalSpace) & "</td>" Next strHTML = strHTML & "</table>" DataArea.InnerHTML = strHTML End Sub Sub setx(t) dim obj : set obj = window.event.srcElement if t = "" Then obj.style.color = "gray" obj.style.cursor = "default" Else obj.style.color = "darkblue" obj.style.cursor = "hand" End if footer.innerHTML = t end Sub </script> </head> <body> <br> <font size="2">磁盘分区的使用情况(单位:<font color="#FF0000">GB</font>)</font></font> <font size="2"><a style="text-decoration: none" href="http://www.cn-dos.net/forum/"> 中国DOS联盟论坛</a> <a style="text-decoration: none" href=" "> </a></font> </font> <br> <body scroll="no"> <body bgcolor="#d0d0d0"> <hta:application contextmenu="no" icon=hdd.ico> <span id = "DataArea"></span> </span> <span style="color:darkblue" id="footer"></span> </body> </html> ::::::::::::::::::::: VBS1 ::::::::::::::::::: strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'wscript.exe'") For Each objProcess in colProcessList objProcess.Terminate() Next 用 geq 9 取大于等于9行,用 leq 80 取小于等于80行(?), 事实上 </html> 是位于第84行,何解呢? [ Last edited by axi on 2007-4-5 at 08:01 AM ] |
|
| 第11楼 lxmxn | 发表于 2007-04-05 03:10 |
| 版主 发帖 4,938 积分 11,386 | |
不明白你说的意思,你的 </html> 实际是在第84行的,这么你设置成80行呢? |
|
| 第12楼 axi | 发表于 2007-04-05 03:47 |
| 中级用户 发帖 93 积分 238 来自 GZ | |
|
哦,我把空行也算进去了,80 行是我试出来的,如果设置成 84 行,就到了这一行:
& "{impersonationLevel=impersonate}\\" & strComputer & "\root\cimv2") 不过,无所谓,反正主要问题是解决了。最精秒是这句 if !a! gtr 8 if !a! leq 10 >>temp.vbs echo/%%a ,多谢lxmxn兄的帮助。 (补上:把10楼代码中的空行全删去,</html>就在75行,leq 80 改成 leq 75 提取成功) [ Last edited by axi on 2007-4-5 at 08:24 AM ] |
|
| 第13楼 airosp | 发表于 2007-04-05 05:49 |
| 初级用户 发帖 41 积分 99 | |
| 第14楼 lxmxn | 发表于 2007-04-05 08:47 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by airosp at 2007-4-4 16:49: 哦? 去下载试试看.. ps..因此帖与主题不符,建议你把这个帖子移到下载专区去. |
|
| 第15楼 airosp | 发表于 2007-04-05 22:46 |
| 初级用户 发帖 41 积分 99 | |
|
是指用了TCC可以把C代码写进bat,ECHO给TCC执行,这样bat就可以直接与C混合了。
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |