![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-03 22:45 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » BAT转VBS问题 |
| 可打印版本 2,958 / 18 |
| 第1楼 djhui | 发表于 2007-03-28 07:13 |
| 初级用户 发帖 10 积分 28 | |
|
BAT转VBS问题 echo strComputer = ".">>tmp.vbs
echo Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")>>tmp.vbs echo Set colItems = objWMIService.ExecQuery _>>tmp.vbs echo ("Select * From Win32_DisplayConfiguration")>>tmp.vbs echo For Each objItem in colItems>>tmp.vbs echo Wscript.Echo "显示芯片: " & objItem.DeviceName&+vbcrlf&"色深: " & objItem.BitsPerPel & "位"&+vbcrlf&"分辨率: " & objItem.PelsWidth & "*" & objItem.PelsHeight>>tmp.vbs echo >>tmp.vbs echo Next>>tmp.vbs echo >>tmp.vbs start tmp.vbs 就拿这个来说吧,因为有些字符须要在前面加一个"^"才能写入VBS,但手动加这个符号又太麻烦,谁能帮我做个批处理,把一个DOS特殊字符前加上^ |
|
| 第2楼 bjsh | 发表于 2007-03-28 07:15 |
| 银牌会员 发帖 621 积分 2,000 | |
|
自己动手
|
|
| 第3楼 djhui | 发表于 2007-03-28 07:23 |
| 初级用户 发帖 10 积分 28 | |
|
手动太麻烦,编个P处理自己又不会!所以我才发贴要别人帮助啊,不然我发贴干嘛
|
|
| 第4楼 KANXM | 发表于 2007-03-28 13:32 |
| 社区乞丐 发帖 8 积分 -174 | |
|
我也想学学 这种知识我也想学学,教教我好吗?
|
|
| 第5楼 KANXM | 发表于 2007-03-28 13:36 |
| 社区乞丐 发帖 8 积分 -174 | |
|
补充 刚才忘了说,可别说的太深奥哇! 不然我听不懂(我是外星人!@!#$%@#$#)
|
|
| 第6楼 estar | 发表于 2007-03-29 03:29 |
| 中级用户 发帖 103 积分 346 | |
|
体力活是入门必修课之一
|
|
| 第7楼 bjsh | 发表于 2007-03-29 05:22 |
| 银牌会员 发帖 621 积分 2,000 | |
|
你的这个问题可把我给难死了;
什么问题都好解决; 就是一个引号;我整整折腾了12个小时;这个时间还在持续...... 改个题目吧;......让大家都来写写 |
|
| 第8楼 flyinspace | 发表于 2007-03-29 05:32 |
| 银牌会员 发帖 517 积分 1,206 | |
|
哦。那你把所有的特殊字符都列出来。。写在一个记事本里。
然后一个一个的判断。 这个文件若是很长的话。 估计等的时间可以气死你了。 |
|
| 第9楼 flyinspace | 发表于 2007-03-29 05:35 |
| 银牌会员 发帖 517 积分 1,206 | |
|
所以说。还不如用c++写一个。。
这些判断也要不了多长时间就可以写好。。 而且执行也会快很多。 |
|
| 第10楼 bjsh | 发表于 2007-03-29 06:40 |
| 银牌会员 发帖 621 积分 2,000 | |
Originally posted by flyinspace at 2007-3-28 04:32 PM: 不是这么简单的问题; 特殊符号也不是轻易能取的出来的,不信自己试试 |
|
| 第11楼 flyinspace | 发表于 2007-03-29 08:01 |
| 银牌会员 发帖 517 积分 1,206 | |
|
可以取出来的。。
试过好几个特殊符号都取出来了。。 至于其他的。没工夫试。。 也不想试。。还不如用c++写。 |
|
| 第12楼 bjsh | 发表于 2007-03-29 09:09 |
| 银牌会员 发帖 621 积分 2,000 | |
|
你自己试试用引号
|
|
| 第13楼 bjsh | 发表于 2007-03-29 22:37 |
| 银牌会员 发帖 621 积分 2,000 | |
|
终于解决了你的问题了;
type 1.txt |shellesc >3.txt shellesc这东西太好了 |
|
| 第14楼 bjsh | 发表于 2007-03-30 07:17 |
| 银牌会员 发帖 621 积分 2,000 | |
|
不借助第三方工具的代码
想说一下第十一行和十二行; 因为几乎每一行都含有特殊符号 虽然都添加了一个^符号但是用echo写入其他文本就会去掉^ 使得所得tmp.txt内容和原文本是一模一样的; 如果用^^来做echo 会当作不存在^来执行 比如echo ^^&和echo & 是一样的都会报错 想过用set var >>tmp.txt 可是每一行又都多出var=... 又想过用for来"tokens=2 delims=var="可是后面的又怎么输出呢;用echo?还是前面的问题. 终于发现了set var"= " <nu >>tmp.txtl的有个好的特性; 一般我用它的目的都是不换行;这次用做写入文本的算是一个创新吧 随后再加上 echo. 终于解决了问题.... 总结自己的收获 echo 对于特殊字符写入文本的问题; 用 set /p ''= " <nul >> & echo. 解决了 [ Last edited by bjsh on 2007-3-29 at 06:30 PM ] |
|
| 第15楼 axi | 发表于 2007-03-30 13:21 |
| 中级用户 发帖 93 积分 238 来自 GZ | |
|
如果想在批处理中创建多个VBS又不想考虑特殊字符问题,可以在VBS每行代码后加上标记,然后用 find 的方法取出标记内容来创建VBS, 如下:
@echo off findstr "'%skip%VBS1" "%~f0" >killvbs.vbs findstr "'%skip%VBS2" "%~f0" >tmp.vbs start tmp.vbs exit strComputer = "." 'VBS1 Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 'VBS1 Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'wscript.exe'") 'VBS1 For Each objProcess in colProcessList 'VBS1 objProcess.Terminate() 'VBS1 Next 'VBS1 strComputer = "." 'VBS2 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 'VBS2 Set colItems = objWMIService.ExecQuery ("Select * From Win32_DisplayConfiguration") 'VBS2 For Each objItem in colItems 'VBS2 Wscript.Echo "显示芯片: " & objItem.DeviceName&+vbcrlf&"色深: " & objItem.BitsPerPel & "位"&+vbcrlf&"分辨率: " & objItem.PelsWidth & "*" & objItem.PelsHeight 'VBS2 Next 'VBS2 以上内容参考了 “批处理与其他语言混合编程” 中的 find 大法。 自动给文本每行后加上标记的方法: @echo off for /f "tokens=*" %%a in (tmp.txt) do echo %%a 'VBS2>>t.txt 把 t.txt 中的内容复制到创建VBS的批处理中即可。 还可以用 more 大法来完成楼主的B转V方案: @echo off more +2 %0>>tmp.vbs&&start tmp.vbs&exit strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery _ ("Select * From Win32_DisplayConfiguration") For Each objItem in colItems Wscript.Echo "显示芯片: " & objItem.DeviceName&+vbcrlf&"色深: " & objItem.BitsPerPel & "位"&+vbcrlf&"分辨率: " & objItem.PelsWidth & "*" & objItem.PelsHeight Next [ Last edited by axi on 2007-3-30 at 11:16 AM ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |