在vbs中将Windows安装目录用作变量时,Windows无法找到指定的路径

时间:2013-10-14 19:28:41

标签: vbscript

使用%windir%位置作为变量时,Windows无法找到指定的路径。另外,有人知道64位计算机是否有系统3s文件夹?我知道变量有效,因为我在消息框中使用过它。这是我的代码,请尽可能帮忙。

set shell = WScript.CreateObject("WScript.Shell")

windowsdir = shell.ExpandEnvironmentStrings("%windir%")

MsgBox(windowsdir)

Dim objShell
Set objShell = WScript.CreateObject( "WScript.Shell" )
objShell.Run("""windowsdir & \System32\dvdplay.exe""")
Set objShell = Nothing

抱歉,我正在尝试使用相同的方法创建文件夹,现在我收到“错误的文件名或编号”错误。如果可以,请帮忙。

dim filesys, newfolder, newfolderpath
Dim oShell : Set oShell = CreateObject("WScript.Shell")
Dim sWinDir : sWinDir = oShell.ExpandEnvironmentStrings("%windir%")
sCmd = """" & sWinDir & "\System32\test"""
WScript.Echo 3, sCmd, "'concatenation' solution"

newfolderpath = """"& sCmd& ""
set filesys=CreateObject("Scripting.FileSystemObject")
If Not filesys.FolderExists(newfolderpath) Then
Set newfolder = filesys.CreateFolder(newfolderpath)
End If

3 个答案:

答案 0 :(得分:1)

使用.Run或.Exec时,您应该使用临时变量来存储和显示命令(至少在“它工作”之前):

Option Explicit
Dim oShell : Set oShell = CreateObject("WScript.Shell")
WScript.Echo 0, oShell.ExpandEnvironmentStrings("%windir%")
Dim sCmd
sCmd = """windowsdir & \System32\dvdplay.exe"""
WScript.Echo 1, sCmd, "no variable interpolation in VBScript"
sCmd = oShell.ExpandEnvironmentStrings("""%windir%\System32\dvdplay.exe""")
WScript.Echo 2, sCmd, "'no concatenation' solution"
Dim sWinDir : sWinDir = oShell.ExpandEnvironmentStrings("%windir%")
sCmd = """" & sWinDir & "\System32\dvdplay.exe"""
WScript.Echo 3, sCmd, "'concatenation' solution"

输出:

cscript 19367777.vbs
0 C:\WINDOWS
1 "windowsdir & \System32\dvdplay.exe" no variable interpolation in VBScript
2 "C:\WINDOWS\System32\dvdplay.exe" 'no concatenation' solution
3 "C:\WINDOWS\System32\dvdplay.exe" 'concatenation' solution

由于VBScript没有将变量内容拼接成字符串文字,因此您必须连接部分(在我看来是第二个最佳解决方案)或将.ExpandEnvironmentStrings()应用于包含%windir%的命令。

答案 1 :(得分:0)

在32位窗口上,你只有System32 ..

在64位窗口上,你有:

  • System32(包含 64位库)
  • SysWOW64(具有 32位库,可在'Windows on Windows 64'仿真层上运行)

我知道,这令人困惑。

在任何一种架构上,%WINDIR%应该是相同的。如果您只是在64位系统上运行脚本,那么只需更换System32 for SysWOW64就可以轻而易举。

在32和64上运行脚本时,可能需要注意的是:“哪个脚本主机与.vbs文件相关联?”通常如果你只需双击64位的VBS,解释器将是:C:\Windows\System32\WScript.exe(即64位主机),这意味着,例如%PROGRAMFILES%扩展为C:\Program Files。在c:\Windows\SysWOW64\WScript.exe(32位)中展开相同的变量,您将获得C:\Program Files (x86)

很长一段时间我都有框架代码,允许脚本在32位主机中“重新运行”,只是为了交叉兼容。

答案 2 :(得分:0)

我注意到有时在更新Visual Studio或SQL Server时,Path有点太满,或者%systemroot%条目因为新的而被“推下”条目。

如果您的系统找不到%windir%,请查看您的系统Path,并确保首先少数条目:

%SystemRoot%;%SystemRoot%\system32;   ...etc

然后确保系统变量windir设置为C:\Windows

您可能需要重新启动。这对我有用。