中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: BAT转VBS问题 上一主题 | 下一主题
djhui
初级用户





积分 28
发帖 10
注册 2006-11-22
状态 离线
『楼 主』:  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特殊字符前加上^

2007-3-28 07:13
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 2 楼』:  

自己动手

2007-3-28 07:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
djhui
初级用户





积分 28
发帖 10
注册 2006-11-22
状态 离线
『第 3 楼』:  

手动太麻烦,编个P处理自己又不会!所以我才发贴要别人帮助啊,不然我发贴干嘛

2007-3-28 07:23
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
KANXM
社区乞丐





积分 -174
发帖 8
注册 2007-3-1
状态 离线
『第 4 楼』:  我也想学学

这种知识我也想学学,教教我好吗?

2007-3-28 13:32
查看资料  发短消息 网志  OICQ (1402692200)  编辑帖子  回复  引用回复
KANXM
社区乞丐





积分 -174
发帖 8
注册 2007-3-1
状态 离线
『第 5 楼』:  补充

刚才忘了说,可别说的太深奥哇! 不然我听不懂(我是外星人!@!#$%@#$#)

2007-3-28 13:36
查看资料  发短消息 网志  OICQ (1402692200)  编辑帖子  回复  引用回复
estar
中级用户





积分 346
发帖 103
注册 2004-4-6
状态 离线
『第 6 楼』:  

体力活是入门必修课之一

2007-3-29 03:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 7 楼』:  

你的这个问题可把我给难死了;

什么问题都好解决;

就是一个引号;我整整折腾了12个小时;这个时间还在持续......

改个题目吧;......让大家都来写写

2007-3-29 05:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 8 楼』:  

哦。那你把所有的特殊字符都列出来。。写在一个记事本里。
然后一个一个的判断。
这个文件若是很长的话。
估计等的时间可以气死你了。

2007-3-29 05:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 9 楼』:  

所以说。还不如用c++写一个。。

这些判断也要不了多长时间就可以写好。。

而且执行也会快很多。

2007-3-29 05:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by flyinspace at 2007-3-28 04:32 PM:
哦。那你把所有的特殊字符都列出来。。写在一个记事本里。
然后一个一个的判断。
这个文件若是很长的话。
估计等的时间可以气死你了。

不是这么简单的问题;

特殊符号也不是轻易能取的出来的,不信自己试试

2007-3-29 06:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 11 楼』:  

可以取出来的。。
试过好几个特殊符号都取出来了。。
至于其他的。没工夫试。。
也不想试。。还不如用c++写。

2007-3-29 08:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 12 楼』:  

你自己试试用引号

2007-3-29 09:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 13 楼』:  

终于解决了你的问题了;

type 1.txt |shellesc >3.txt


shellesc这东西太好了

2007-3-29 22:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 14 楼』:  

不借助第三方工具的代码

  Quote:

  1. @echo off
  2. if exist tmp.txt del tmp.txt
  3. for /f "tokens=1 delims=" %%a in (test.txt) do set "var=%%a" & call :change
  4. goto exit
  5. :change
  6. set "var=%var:^=^^%"
  7. set "var=%var:>=^>%"
  8. set "var=%var:<=^<%"
  9. set "var=%var:&=^&%"
  10. set "var=%var:|=^|%"
  11. set /p "=%var%" <nul >>tmp.txt
  12. echo. >>tmp.txt
  13. :exit
BJSH发表于:  2007-03-29  18:08

想说一下第十一行和十二行;
因为几乎每一行都含有特殊符号
虽然都添加了一个^符号但是用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 ]

2007-3-30 07:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
axi
中级用户

脚本爱好者


积分 238
发帖 93
注册 2007-3-11
来自 GZ
状态 离线
『第 15 楼』:  

如果想在批处理中创建多个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 ]

2007-3-30 13:21
查看资料  发短消息 网志  OICQ (453623262)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: