中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-05 06:46
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何准确输出原文件的内容
可打印版本  2,604 / 38
第16楼 leton 发表于 2007-06-29 14:50
初级用户 发帖 72 积分 170
刚才贴错了,应该是下面内容:

原:
@Echo Wscript.Quit >> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat

结果:
@Echo Wscript.Quit
第17楼 leton 发表于 2007-06-29 14:52
初级用户 发帖 72 积分 170
@Echo Wscript.Quit >> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat

@Echo Wscript.Quit

少了 ’>> %%windir%%\Shutdown.vbs‘ 内容??搞不懂
第18楼 wudixin96 发表于 2007-06-29 14:52
银牌会员 发帖 931 积分 1,928
大哥>>需要转义啊
第19楼 HAT 发表于 2007-06-29 14:58
版主 发帖 5,017 积分 9,023
转义
第20楼 leton 发表于 2007-06-29 15:12
初级用户 发帖 72 积分 170
倒,我测试了 ^>> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat

难怪不行,每个符合都需要加 ^ 才行。

今天学不少了,哈,有空要看看 转义概念才行,谢谢各位。

还有,如果要把多个BAT合并一个,除了 Echo 方法,还有其它吗?
第21楼 HAT 发表于 2007-06-29 15:40
版主 发帖 5,017 积分 9,023
//还有,如果要把多个BAT合并一个,除了 Echo 方法,还有其它吗?

copy a.bat+b.bat c.bat
第22楼 leton 发表于 2007-06-29 15:46
初级用户 发帖 72 积分 170
新问题,应该还是转义问题吧,没搞懂

原:
: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
第23楼 leton 发表于 2007-06-29 15:54
初级用户 发帖 72 积分 170
『第 21 楼』:

//还有,如果要把多个BAT合并一个,除了 Echo 方法,还有其它吗?

copy a.bat+b.bat c.bat


这种不符合我这边条件,我是想有没有方法实现,BAT,判断条件,然后按判断结果输出对应已定义BAT(就是一个集合,判断条件,然后将符合条件得内容输出生成BAT,然后运行)

可以减少BAT数量,太多难管理,集中一个在管理服务器上运行,直观方便。

除了 ECHO ,以前好像看到有 Command /c ? 忘记了帖子内容...
第24楼 wudixin96 发表于 2007-06-29 16:00
银牌会员 发帖 931 积分 1,928
单句测试一下


偶测试没发现问题。

不记得cmd下有command命令。
第25楼 leton 发表于 2007-06-29 16:09
初级用户 发帖 72 积分 170
原因找到了...不知道咋解决:

@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

^如何解决?我测试了 ^^ 上去,还是不行...
第26楼 HAT 发表于 2007-06-29 16:10
版主 发帖 5,017 积分 9,023
二次转义需要三个^
第27楼 leton 发表于 2007-06-29 16:15
初级用户 发帖 72 积分 170
行了,改成

『第 25 楼』:

原因找到了...不知道咋解决:

@Echo @Echo Set objWMIService = GetObject("winmgmts:\\" ^^^& strComputer ^^^& "\root\cimv2") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
第28楼 HAT 发表于 2007-06-29 16:25
版主 发帖 5,017 积分 9,023
三个^
第一个用来转义第二个
第三个用来转义后面的&
第29楼 leton 发表于 2007-06-29 16:29
初级用户 发帖 72 积分 170
嗯,受教了:)

还请教一下: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"

删除才能正常
第30楼 wudixin96 发表于 2007-06-29 16:34
银牌会员 发帖 931 积分 1,928
晕。DEL是内部命令。用run是不能调用的。
可以直接用VBS的delete或deletefile函数删除啊。
上一页  1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023