Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何使用vbs运行多个批处理,并使用环境变量设置批处理文件路径?_Batch File_Vbscript - Fatal编程技术网

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:顺便说一下,我还有一个类似的问题。如果您能阅读,我非常感谢您抽出时间。