标题: 如何准确输出原文件的内容
[打印本页]
作者: leton
时间: 2007-6-29 11:54
标题: 如何准确输出原文件的内容
我想把以下内容一起写到BAT文件内,执行时,再透过 >> 1.vbs 方式重新生成脚本,但出现问题,我把以下内容写到 BAT 中后,运行发现,某些内容没法输出到 1.VBS 内,如何解决???
1.vbs
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objProcess in colProcesses
If Right(objProcess.Name, 7) = "f1.bat" Then
Wscript.Quit
End If
Next
Set objShell = CreateObject("WScript.Shell")
objShell.Run "%windir%\data\f1.bat"
Wscript.Quit
[
Last edited by bjsh on 2007-7-31 at 10:24 AM ]
作者: lxmxn
时间: 2007-6-29 12:08
哪些内容没有输出到1.vbs内?
作者: HAT
时间: 2007-6-29 13:39
用%%代替%
特殊字符需要用^进行转义
作者: leton
时间: 2007-6-29 13:47
问题刚搜索找到解决方法了,谢谢各位。但还有几个问题想请教
1.% 号知道,但特殊字符特指那些?
‘
:
;
#$^& 是这种吗?
2.我想把N个BAT集合在一个BAT内,在符合判断条件后,通过 >> 方式分别输出成不同用途BAT或VBS,可出现个小问题。。。。如下:
语句段间 空行输出'这样描述不知道对不'
原句
:1
goto 2
就这行,我用 @Echo >> %windir%\One-Week.bat 出现问题
:2
goto end
输出结果:ECHO 处于关闭状态。导致脚本没法继续运行。咋解决?
作者: dikex
时间: 2007-6-29 13:51
echo.>>%windir%\One-Week.bat
作者: leton
时间: 2007-6-29 14:00
受教了,又有个问题....呵呵
原句:
@Echo :Week7 >> %windir%\One-Week.bat
@Echo @Set Date="" >> %windir%\One-Week.bat
@Echo @For /f "tokens=2,3 delims=; " %%a in ('Date /T') do Set Date=%%a >> %windir%\One-Week.bat
@Echo @Echo ^%Date% >> %windir%\One-Week.bat
@Echo @If ^%Date% EQU 星期日 ( Goto WZ ) Else ( Goto Week2 ) >> %windir%\One-Week.bat
结果:
:Week7
@Set Date=""
@For /f "tokens=2,3 delims=; " %a in ('Date /T') do Set Date=%a
@Echo 2007-06-29 星期五
@If 2007-06-29 星期五 EQU 星期日 ( Goto WZ ) Else ( Goto Week2 )
?? ^%Date% EQU 星期日 输出后,直接被运行了 2007-06-29 星期五
咋回事?
作者: leton
时间: 2007-6-29 14:06
变量参数 %Data% 被运行了?????咋解决?加 %% ^^ 都没效果
作者: wudixin96
时间: 2007-6-29 14:07
^%Date^%
作者: leton
时间: 2007-6-29 14:08
倒....^%*****%^ 我用错方法了。。。。
^%****^%.....谢谢
作者: leton
时间: 2007-6-29 14:15
^%Date^%
测试了,不行...
^%Date^%
运行后结果:^%Date^% 没了.....
原:
@Echo @If ^%Date^% EQU 星期日 ( Goto WZ ) Else ( Goto Week2 ) >> %windir%\One-Week.bat
输出结果:
@If EQU 星期日 ( Goto WZ ) Else ( Goto Week2 )
作者: leton
时间: 2007-6-29 14:35
??那位兄弟知道教教,谢谢
作者: wudixin96
时间: 2007-6-29 14:37
抱歉抱歉。是%%date%%
作者: HAT
时间: 2007-6-29 14:38
try this one :)
@echo off
cd.>%windir%\One-Week.bat
echo @echo off >>%windir%\One-Week.bat
echo :Week7 >> %windir%\One-Week.bat
echo set Date="" >>%windir%\One-Week.bat
echo for /f "tokens=2,3 delims=; " %%%%a in ('Date /T') do set date=%%%%a >>%windir%\One-Week.bat
echo echo %%Date%% >>%windir%\One-Week.bat
echo if %%Date%% equ 星期日 ( goto WZ ) else ( goto Week2 ) >>%windir%\One-Week.bat
作者: leton
时间: 2007-6-29 14:47
行了...嘿,谢了,又有个小问题.
原
@Echo @Call %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
结果:
@Call \Shutdown.vbs
....--! 自己都感觉纳闷了,没法2次输出?
作者: wudixin96
时间: 2007-6-29 14:50
@Echo @Call %%%%windir%%%%\Shutdown.vbs >> %windir%\One-Week.bat
作者: leton
时间: 2007-6-29 14:50
刚才贴错了,应该是下面内容:
原:
@Echo Wscript.Quit >> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
结果:
@Echo Wscript.Quit
作者: leton
时间: 2007-6-29 14:52
@Echo Wscript.Quit >> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo Wscript.Quit
少了 ’>> %%windir%%\Shutdown.vbs‘ 内容??搞不懂
作者: wudixin96
时间: 2007-6-29 14:52
大哥>>需要转义啊
作者: HAT
时间: 2007-6-29 14:58
转义
@Echo Wscript.Quit ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
作者: leton
时间: 2007-6-29 15:12
倒,我测试了 ^>> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
难怪不行,每个符合都需要加 ^ 才行。
今天学不少了,哈,有空要看看 转义概念才行,谢谢各位。
还有,如果要把多个BAT合并一个,除了 Echo 方法,还有其它吗?
作者: HAT
时间: 2007-6-29 15:40
//还有,如果要把多个BAT合并一个,除了 Echo 方法,还有其它吗?
copy a.bat+b.bat c.bat
作者: leton
时间: 2007-6-29 15:46
新问题,应该还是转义问题吧,没搞懂
原:
:Shutdown
@Copy Nul %windir%\Shutdown.vbs
@Echo strComputer = "." >> %windir%\Shutdown.vbs
@Echo Set objWMIService = GetObject("winmgmts:\\" ^& strComputer ^& "\root\cimv2") >> %windir%\Shutdown.vbs
@Echo Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process") >> %windir%\Shutdown.vbs
@Echo For Each objProcess in colProcesses >> %windir%\Shutdown.vbs
@Echo If Right(objProcess.Name, 12) = "ntbackup.exe" Then >> %windir%\Shutdown.vbs
@Echo Set objShell = CreateObject("WScript.Shell") >> %windir%\Shutdown.vbs
@Echo objShell.Run "%windir%\Rtime.bat" >> %windir%\Shutdown.vbs
@Echo Wscript.Quit >> %windir%\Shutdown.vbs
@Echo End If >> %windir%\Shutdown.vbs
@Echo Next >> %windir%\Shutdown.vbs
@Echo Set objShell = CreateObject("WScript.Shell") >> %windir%\Shutdown.vbs
@Echo objShell.Run "shutdown.exe -f -s -t 600" >> %windir%\Shutdown.vbs
@Echo Wscript.Quit >> %windir%\Shutdown.vbs
@Call %windir%\Shutdown.vbs
@Goto End
输出修改源:
@Echo :Shutdown >> %windir%\One-Week.bat
@Echo @Copy Nul %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo strComputer = "." ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo Set objWMIService = GetObject("winmgmts:\\" ^& strComputer ^& "\root\cimv2") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo For Each objProcess in colProcesses ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo If Right(objProcess.Name, 12) = "ntbackup.exe" Then ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo Set objShell = CreateObject("WScript.Shell") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo objShell.Run "^%^%windir%%\Rtime.bat" ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo Wscript.Quit ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo End If ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo Next ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo Set objShell = CreateObject("WScript.Shell") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo objShell.Run "shutdown.exe -f -s -t 600" ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Echo Wscript.Quit ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Call %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
@Echo @Goto End >> %windir%\One-Week.bat
@Echo.>> %windir%\One-Week.bat
@Echo :END >> %windir%\One-Week.bat
@Echo @Goto Exit >> %windir%\One-Week.bat
结果:
strComputer = "."
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objProcess in colProcesses
If Right(objProcess.Name, 12) = "ntbackup.exe" Then
Set objShell = CreateObject("WScript.Shell")
Wscript.Quit
End If
Next
Set objShell = CreateObject("WScript.Shell")
objShell.Run "shutdown.exe -f -s -t 600"
Wscript.Quit
运行错误,对比发现有一句没输出成功:
@Echo Set objWMIService = GetObject("winmgmts:\\" ^& strComputer ^& "\root\cimv2") >> %windir%\Shutdown.vbs
作者: leton
时间: 2007-6-29 15:54
『第 21 楼』:
//还有,如果要把多个BAT合并一个,除了 Echo 方法,还有其它吗?
copy a.bat+b.bat c.bat
这种不符合我这边条件,我是想有没有方法实现,BAT,判断条件,然后按判断结果输出对应已定义BAT(就是一个集合,判断条件,然后将符合条件得内容输出生成BAT,然后运行)
可以减少BAT数量,太多难管理,集中一个在管理服务器上运行,直观方便。
除了 ECHO ,以前好像看到有 Command /c ? 忘记了帖子内容...
作者: wudixin96
时间: 2007-6-29 16:00
单句测试一下
@Echo @Echo Set objWMIService = GetObject("winmgmts:\\" ^& strComputer ^& "\root\cimv2") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
偶测试没发现问题。
不记得cmd下有command命令。
作者: leton
时间: 2007-6-29 16:09
原因找到了...不知道咋解决:
@Echo @Echo Set objWMIService = GetObject("winmgmts:\\" ^& strComputer ^& "\root\cimv2") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
上面是第一次输出,然后结果:
@Echo Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") >> %C:\WINDOWS%\Shutdown.vbs
运行就报错,因为缺了 ^ 符号,正确应该是
@Echo Set objWMIService = GetObject("winmgmts:\\" ^& strComputer ^& "\root\cimv2") >> %C:\WINDOWS%\Shutdown.vbs
^如何解决?我测试了 ^^ 上去,还是不行...
作者: HAT
时间: 2007-6-29 16:10
二次转义需要三个^
@Echo @Echo Set objWMIService = GetObject("winmgmts:\\" ^^^& strComputer ^^^& "\root\cimv2") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
作者: leton
时间: 2007-6-29 16:15
行了,改成
『第 25 楼』:
原因找到了...不知道咋解决:
@Echo @Echo Set objWMIService = GetObject("winmgmts:\\" ^^^& strComputer ^^^& "\root\cimv2") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
作者: HAT
时间: 2007-6-29 16:25
三个^
第一个用来转义第二个
第三个用来转义后面的&
作者: leton
时间: 2007-6-29 16:29
嗯,受教了:)
还请教一下:VBS 如何实现执行多个任务
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objProcess in colProcesses
If Right(objProcess.Name, 12) = "ntbackup.exe" Then
Set objShell = CreateObject("WScript.Shell")
Wscript.Quit
End If
Next
Set objShell = CreateObject("WScript.Shell")
objShell.Run "shutdown.exe -f -s -t 600"
objShell.Run "Del C:\WINDOWS\Shutdown.vbs"
objShell.Run "Del C:\WINDOWS\Rtime.bat"
Wscript.Quit
这个一执行就报错,只能把
objShell.Run "Del C:\WINDOWS\Shutdown.vbs"
objShell.Run "Del C:\WINDOWS\Rtime.bat"
删除才能正常
作者: wudixin96
时间: 2007-6-29 16:34
晕。DEL是内部命令。用run是不能调用的。
可以直接用VBS的delete或deletefile函数删除啊。
作者: leton
时间: 2007-6-29 16:42
*.* 收到,哥们,能否写句?
我改成下面,报错,估计用法不正确.....
objShell.deletefile "%windir%\rtime.bat"
objShell.deletefile "%windir%\shutdown.vbs"
作者: wudixin96
时间: 2007-6-29 16:50
呵呵,楼主的这个用法当然不正确的。
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile(filespec)
作者: HAT
时间: 2007-6-29 16:57
vbs简明教程
http://www.cn-dos.net/forum/view ... E%E6%95%99%E7%A8%8B
作者: leton
时间: 2007-6-29 17:05
谢谢,不过有个怪事,刚才偏好BAT后,运行N次成功,现在增加了些内容,反而出现问题,有头没尾,内容缺失,怪事。还在测试中,难不成需亚重启。。。
作者: wudixin96
时间: 2007-6-29 17:21
有可能的。偶刚刚也有几段P运行成功。后来老是出错。现在重启后,又正常了。
电脑这东西啊?!!!!
作者: HAT
时间: 2007-6-29 17:34
怀疑某些变量没有释放^_^
作者: bjsh
时间: 2007-6-29 23:10
http://www.cn-dos.net/forum/viewthread.php?tid=28958&fpage=1
看 axi 兄 给的 几种方法
作者: leton
时间: 2007-7-2 15:50
搞了两天,基本是把需要用得BAT集合到一个P上了,但发现问题:
单句输出 %Windir%
嵌套输出一次 %%Windir%%
嵌套输出后,再输出一次 失败,变量会被运行 或者 参数不见了 使用
'^%%','^^%%','%%%%','^%^%'
...单句运行没问题,故障出现在第一次输出,然后运行再输出,最后输出的P得变量就有问题...还没解决
作者: leton
时间: 2007-7-2 15:58
『第 37 楼』:
http://www.cn-dos.net/forum/viewthread.php?tid=28958&fpage=1
看 axi 兄 给的 几种方法
晕,白搞了2天,没看到这句.....--!