Batch file 如何使用vbs运行多个批处理,并使用环境变量设置批处理文件路径?
我有一个脚本(由提供),它将Batch file 如何使用vbs运行多个批处理,并使用环境变量设置批处理文件路径?,batch-file,vbscript,Batch File,Vbscript,我有一个脚本(由提供),它将foo.txt重命名为foo.bat,启动foo.bat,当foo.bat结束时,将其重命名回foo.txt Dim Fso Set Fso = WScript.CreateObject("Scripting.FileSystemObject") Fso.MoveFile "foo.txt", "foo.bat" SCRIPT = "foo.bat" Set objShell = CreateObject("WScript.Shell") strPath = WSc
foo.txt
重命名为foo.bat
,启动foo.bat
,当foo.bat
结束时,将其重命名回foo.txt
Dim Fso
Set Fso = WScript.CreateObject("Scripting.FileSystemObject")
Fso.MoveFile "foo.txt", "foo.bat"
SCRIPT = "foo.bat"
Set objShell = CreateObject("WScript.Shell")
strPath = WScript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile)
NewPath = objFSO.BuildPath(strFolder, SCRIPT)
Set objshell = createobject("wscript.shell")
objshell.Run "%COMSPEC% /c " & NewPath, 1, True
' Changes start here
'===================================================================
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
' Hold execution until cmd.exe process is done
Do
' Get cmd.exe processes
Set colProcessList = objWMIService.ExecQuery _
("SELECT Name FROM Win32_Process WHERE Name LIKE 'cmd.exe'")
WScript.Sleep 250
Loop While colProcessList.Count > 0
Fso.MoveFile "foo.bat", "foo.txt"
问题是:
foo.txt
(foo.bat
)位于路径中,该路径可能会根据Windows版本而更改。为此,我需要使用环境变量设置foo.txt
路径(例如:%homedrive%
),但此更改不起作用
SCRIPT = "%homedrive%\test\foo.bat"
当第一批(foo.bat
)结束时,我需要调用第二批(bar.bat
)。但是,在.vbs的末尾,此更改不起作用
Dim Fso
Set Fso = WScript.CreateObject("Scripting.FileSystemObject")
Fso.MoveFile "%homedrive%\test\bar.txt", "%homedrive%\test\bar.bat"
SCRIPT = "%homedrive%\test\bar.bat"
Set objShell = CreateObject("WScript.Shell")
strPath = WScript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile)
NewPath = objFSO.BuildPath(strFolder, SCRIPT)
set objshell = createobject("wscript.shell")
objshell.Run "%COMSPEC% /c " & NewPath, 1, True
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
' Hold execution until cmd.exe process is done
Do
' Get cmd.exe processes
Set colProcessList = objWMIService.ExecQuery _
("SELECT Name FROM Win32_Process WHERE Name LIKE 'cmd.exe'")
WScript.Sleep 250
Loop While colProcessList.Count > 0
Fso.MoveFile "%homedrive%\test\bar.bat", "%homedrive%\test\bar.txt"
这应该是有效的:
Dim Fso
Set Fso = WScript.CreateObject("Scripting.FileSystemObject")
set objshell = createobject("wscript.shell")
homedrive = objshell.ExpandEnvironmentStrings( "%HOMEDRIVE%" )
Fso.MoveFile homedrive & "\test\bar.txt", homedrive & "\test\bar.bat"
SCRIPT = homedrive & "\test\bar.bat"
strPath = Wscript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile)
NewPath = objFSO.BuildPath(strFolder, SCRIPT)
set objshell = createobject("wscript.shell")
objshell.Run (script),1,True
Fso.MoveFile homedrive & "\test\bar.bat", homedrive & "\test\bar.txt"
你需要,或者。你可以这样搜索,并找到许多这样做的例子。@Squashman我不是vbs方面的专家。如果我知道怎么做,我就不会问这个问题了。我已经读过它(),但我不知道如何应用它。你能更具体一点,为我树立一个榜样吗?谢谢
Run
方法可以识别环境变量,但FileSystemObject方法不能识别,因此您必须先展开环境变量,然后才能将该变量与脚本路径一起使用。如果您从Rob处读取该页面,那么我想您至少会尝试,homedrive=objshell.ExpandEnvironmentStrings(“%HOMEDRIVE%”
。您的代码中编写的Vbscript要复杂得多,在任何语言中,最简单的事情就是为变量赋值。请检查。环境变量可以工作。可能在其实现中有错误(不是调用.bat:SCRIPT=HOMEDRIVE&“\test\foo.bat”)现在应该解决一个问题了:我需要.vbs在启动.bat时结束(并关闭wscript.exe)。你怎么做?行objshell.Run(script),1,True>末尾的真值指示Run()应该等待进程完成,所以不需要基于WMI的等待()函数。批处理文件完成后,wscript进程将终止,否则它无法将.bat重命名为.txti。非常感谢。pd:顺便说一下,我还有一个类似的问题。如果您能阅读,我非常感谢您抽出时间。