|
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
状态 离线
|
|
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 |
|
|
KANXM
社区乞丐
积分 -174
发帖 8
注册 2007-3-1
状态 离线
|
『第
5 楼』:
补充
刚才忘了说,可别说的太深奥哇! 不然我听不懂(我是外星人!@!#$%@#$#)
|
|
2007-3-28 13:36 |
|
|
estar
中级用户
积分 346
发帖 103
注册 2004-4-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
状态 离线
|
|
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: |
- @echo off
- if exist tmp.txt del tmp.txt
- for /f "tokens=1 delims=" %%a in (test.txt) do set "var=%%a" & call :change
- goto exit
- :change
- set "var=%var:^=^^%"
- set "var=%var:>=^>%"
- set "var=%var:<=^<%"
- set "var=%var:&=^&%"
- set "var=%var:|=^|%"
- set /p "=%var%" <nul >>tmp.txt
- echo. >>tmp.txt
- :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 |
|