|
1.批处理调用VBS,并获取VBS的返回值
批处理 yztest.cmd:
@echo off
::take care of below command, never use it in this command, for this will disable char !.
::setlocal enabledelayedexpansion
for /f "delims=" %%a in ('cscript. //nologo yztest.vbs "hello"') do ( set strFromVBS=%%a )
VBS yztest.vbs:
set bjArgs=WSCRIPT.Arguments
strFromBAT = objArgs(0)
strFromBAT= replace(strFromBAT,"^","^^")
strFromBAT= replace(strFromBAT,"&","^&")
WScript.Echo strFromBAT
注:
1.注意在批处理端不要使用setlocal enabledelayedexpansion,否则从vbs返回的字符!不能显示。
2.注意在VBS端返回的字符需要做转义处理,否则字符^,&会丢失。
通过vbs脚本实现批处理后台运行
使用Windows脚本来调批处理
一个非常简单的小脚本
假设你的批处理是C:\xxx.bat
那么在记事本里写入
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "C:\xxx.bat",0
保存为一个以vbs为扩展名的文件
运行它就可以在后台运行你的批处理了
以创建“记事本”快捷方式为例子
方法一:使用cmd
echo [InternetShortcut] >>a.url
echo URL=c:\windows\system32\notepad.exe >>a.url
echo IconIndex=0 >>a.url
echo IconFile=C:\windows\system32\shell32.dll >>a.url
方法二:使用vbs(一)
Dim WSHShell, fs
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Function MakeDesktopShortcut( name, target )
Dim Shortcut,DesktopPath,StartupPath
DesktopPath = WSHShell.SpecialFolders("Desktop")
Set Shortcut = WSHShell.CreateShortcut(DesktopPath & "\" & name & ".lnk")
Shortcut.TargetPath = target
StartupPath = fs.GetParentFolderName( target )
If fs.FolderExists( StartupPath ) then
Shortcut.WorkingDirectory = StartupPath
End If
Shortcut.Save
End Function
MakeDesktopShortcut "Shortcut to Notepad", "C:\Windows\Notepad.exe"
方法三:使用vbs(二)
set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop") '获得桌面目录
set ShellLink = WshShell.CreateShortcut(strDesktop & "\qq.lnk") '快捷方式存放目录及名称
oShellLink.TargetPath = "C:\Program Files\Tencent\QQ\CoralQQ.exe" '指向的可执行文件
oShellLink.WindowStyle. = 1 '运行方式
oShellLink.Hotkey = "CTRL+SHIFT+F" '快捷键
oShellLink.IconLocation = "C:\Program Files\Tencent\QQ\QQ.exe, 0" '图标
oShellLink.Description = "qq" '备注
oShellLink.WorkingDirectory = "C:\Program Files\Tencent\QQ\" '起始目录
oShellLink.Save '创建快捷方式
'建立Shell对象
set sh=WScript.CreateObject("WScript.Shell")
WScript.Sleep 500
'向telnet发送命令
sh.SendKeys "open 202.1.123.32 23{ENTER}"
WScript.Sleep 500
sh.SendKeys "hehe{ENTER}"
WScript.Sleep 500
sh.SendKeys "xlm{ENTER}"
WScript.Sleep 500
sh.SendKeys "telnet 218.23.33.146{ENTER}"
WScript.Sleep 500
sh.SendKeys "test{ENTER}"
WScript.Sleep 500
sh.SendKeys "haha{ENTER}"
sh.SendKeys "ksh{ENTER}"
WScript.Sleep 500
sh.SendKeys "set -o vi{ENTER}"
WScript.Sleep 500
sh.SendKeys "stty erase ^H{ENTER}"
-----------------------------------------------------------------------
' 对于SendKeys这个命令可以send什么,可以看下面的列表:
' BACKSPACE {BACKSPACE}, {BS}, or {BKSP}
' BREAK {BREAK}
' CAPS LOCK {CAPSLOCK}
' DEL or DELETE {DELETE} or {DEL}
' DOWN ARROW {DOWN}
' END {END}
' ENTER {ENTER} or ~
' ESC {ESC}
' HELP {HELP}
' HOME {HOME}
' INS or INSERT {INSERT} or {INS}
' LEFT ARROW {LEFT}
' NUM LOCK {NUMLOCK}
' PAGE DOWN {PGDN}
' PAGE UP {PGUP}
' PRINT SCREEN {PRTSC}
' RIGHT ARROW {RIGHT}
' SCROLL LOCK {SCROLLLOCK}
' TAB {TAB}
' UP ARROW {UP}
' F1 {F1}
' F2 {F2}
' F3 {F3}
' F4 {F4}
' F5 {F5}
' F6 {F6}
' F7 {F7}
' F8 {F8}
' F9 {F9}
' F10 {F10}
' F11 {F11}
' F12 {F12}
' F13 {F13}
' F14 {F14}
' F15 {F15}
' F16 {F16}
' SHIFT +
' CTRL ^
' ALT %
再写auto.bat批处理脚本:
-----------------------------------------------------------------------
rem 启动telnet
start telnet.exe
rem batch telnet
cscript. /nologo auto.vbs
-----------------------------------------------------------------------
两文件放于同一目录下,直接点击auto.bat就可以自动telnet主机并执行一些unix命令了。
脚本实现telnet自动登陆
下面代码,只要执行一个就可以登陆到几台计算机运行监控命令。 VBS脚本和BAT批处理自身删除的方法(自杀)
VBS脚本和BAT批处理自身删除的方法 删除自身之:VBS 把下面的脚本保存为selfkill.vbs或 selfkill.vbe: CODE:Set fso = CreateObject("Scripting.FileSystemObject") f = fso.DeleteFile(WScript.ScriptName) WScript.Echo( WScript.ScriptName) 然后运行它,是不是发现selfkill.vbs神奇的消失啦?而 后面的对话框却被正常显示出来噢^*^ 上面的脚本调用FSO控件,使用WSH中Wscript对象得 ScriptName属性,得到脚本自身的文件名, 并调用FSO的DeleteFile方法删除自身! 把它稍微改写一下: CODE:On Error Resume Next '防止出现错误 Set fso = CreateObject("Scripting.FileSystemObject") WScript.Sleep 1000 '将脚本执行挂起1秒 fso.DeleteFile(WScript.ScriptName) '删除脚本自身<!--more--> If fso.FileExists("c:selfkill.exe") Then fso.DeleteFile("c:selfkill.exe") '删除程序 程序就可以动态生成VBS自删除脚本,并调用它删除自身啦,方法同 样和批处理文件的自删除相似! 需要说明的是由于病毒及蠕虫对脚本的滥用,脚本删除文件时可能会被 被误认为恶意代码! 附:自删除js脚本: CODE:try{fso = new ActiveXObject("Scripting.FileSystemObject"); WScript.Sleep(1000);//休眠1秒 fso.DeleteFile(WScript.ScriptName);// 删除脚本自身 fso.DeleteFile("c:selfkill.exe");// 删除程序 }catch(e){} 附:自删除js脚本: CODE:try{fso = new ActiveXObject("Scripting.FileSystemObject"); WScript.Sleep(1000);//休眠1秒 fso.DeleteFile(WScript.ScriptName);// 删除脚本自身 fso.DeleteFile("c:selfkill.exe");// 删除程序 }catch(e){} 删除自身之:批处理 相关知识: %0的具体应用小结 在批处理中,%0即代表批处理文件本身。 在批处理中,使用命令“del %0”即可达到删除自身的目的。 利用此特性,批处理经常被用来做完全卸载工具。 当然,我们还可以利用扩展,获得更多的用途: 1.利用“%~dp0”可以得到该文件的路径; CODE:@echo off echo %~dp0 -------------------------------------- 2.利用“%~nx0”可以得到文件名; CODE: @echo off echo %~nx0 如我C盘有个文件夹名为 AAA 里面有很多文件 我想把 g:AAA 这个文件夹里的文件和文件夹全删除该怎么写批处理啊! rd /s /q C:AAA 上面一行代码恰好能解决问题!(也删掉了AAA这个文件夹)详见解 释: 删除一个目录。 RMDIR [/S] [/Q] [drive:]path RD [/S] [/Q] [drive:]path /S 除目录本身外,还将删除指定目录下的所有子目录和 文件。用于删除目录树。 /Q 安静模式,带 /S 删除目录树时不要求确认 参考资料:rd/? |
/2