中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 05:35
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何准确输出原文件的内容 查看 2,601 回复 38
16 发表于 2007-06-29 14:50 ·  中国 广东 广州 番禺区 电信
初级用户
★★
积分 170
发帖 72
注册 2007-03-11 22:16
19年会员
UID 81435
性别 男
状态 离线
刚才贴错了,应该是下面内容:

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

结果:
@Echo Wscript.Quit
17 发表于 2007-06-29 14:52 ·  中国 广东 广州 番禺区 电信
初级用户
★★
积分 170
发帖 72
注册 2007-03-11 22:16
19年会员
UID 81435
性别 男
状态 离线
@Echo Wscript.Quit >> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat

@Echo Wscript.Quit

少了 ’>> %%windir%%\Shutdown.vbs‘ 内容??搞不懂
18 发表于 2007-06-29 14:52 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
大哥>>需要转义啊
19 发表于 2007-06-29 14:58 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
转义

@Echo Wscript.Quit ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
20 发表于 2007-06-29 15:12 ·  中国 广东 广州 天河区 电信
初级用户
★★
积分 170
发帖 72
注册 2007-03-11 22:16
19年会员
UID 81435
性别 男
状态 离线
倒,我测试了 ^>> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat

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

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

还有,如果要把多个BAT合并一个,除了 Echo 方法,还有其它吗?
21 发表于 2007-06-29 15:40 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
//还有,如果要把多个BAT合并一个,除了 Echo 方法,还有其它吗?

copy a.bat+b.bat c.bat
22 发表于 2007-06-29 15:46 ·  中国 广东 广州 天河区 电信
初级用户
★★
积分 170
发帖 72
注册 2007-03-11 22:16
19年会员
UID 81435
性别 男
状态 离线
新问题,应该还是转义问题吧,没搞懂

原:
: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 发表于 2007-06-29 15:54 ·  中国 广东 广州 天河区 电信
初级用户
★★
积分 170
发帖 72
注册 2007-03-11 22:16
19年会员
UID 81435
性别 男
状态 离线
『第 21 楼』:

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

copy a.bat+b.bat c.bat


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

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

除了 ECHO ,以前好像看到有 Command /c ? 忘记了帖子内容...
24 发表于 2007-06-29 16:00 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
单句测试一下
@Echo @Echo Set objWMIService = GetObject("winmgmts:\\" ^& strComputer ^& "\root\cimv2")  ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat


偶测试没发现问题。

不记得cmd下有command命令。
25 发表于 2007-06-29 16:09 ·  中国 广东 广州 番禺区 电信
初级用户
★★
积分 170
发帖 72
注册 2007-03-11 22:16
19年会员
UID 81435
性别 男
状态 离线
原因找到了...不知道咋解决:

@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 发表于 2007-06-29 16:10 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
二次转义需要三个^

@Echo @Echo Set objWMIService = GetObject("winmgmts:\\" ^^^& strComputer ^^^& "\root\cimv2") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
27 发表于 2007-06-29 16:15 ·  中国 广东 广州 番禺区 电信
初级用户
★★
积分 170
发帖 72
注册 2007-03-11 22:16
19年会员
UID 81435
性别 男
状态 离线
行了,改成

『第 25 楼』:

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

@Echo @Echo Set objWMIService = GetObject("winmgmts:\\" ^^^& strComputer ^^^& "\root\cimv2") ^>^> %%windir%%\Shutdown.vbs >> %windir%\One-Week.bat
28 发表于 2007-06-29 16:25 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
三个^
第一个用来转义第二个
第三个用来转义后面的&
29 发表于 2007-06-29 16:29 ·  中国 广东 广州 番禺区 电信
初级用户
★★
积分 170
发帖 72
注册 2007-03-11 22:16
19年会员
UID 81435
性别 男
状态 离线
嗯,受教了:)

还请教一下: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 发表于 2007-06-29 16:34 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
晕。DEL是内部命令。用run是不能调用的。
可以直接用VBS的delete或deletefile函数删除啊。
论坛跳转: