2017-06-12 90 views
0

该脚本是从网络执行的,应该引入位于本地计算机中的配置文件C:具有映射路径的驱动器。wshShell.run单行命令不会设置变量并正确传递

我试过了几个不同的想法,但每次我收到“系统错误67发生,网络名称找不到。”任何帮助表示赞赏,因为我无法解决问题。 (我是一个新手,以命令行)

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run "cmd /k cd.. & cd CIEB_Group3 & set /p RootServer=<Server.txt & net use K: %RootServer% /pers:yes", 1, True 
+0

'RootServer'变量的值是什么? – lit

+0

这是一个到\\ XPVGHA001 \ landat1文件夹的网络共享路径。当我在提示本身中逐行执行它们时,这些命令正常工作。当它全部作为一行执行时,变量无法实例化。 – Arch1medes

+1

您如何知道在新的'WScript.Shell'中定义了'RootServer'变量? – lit

回答

1

而不是创建一个调用一个长命令VBS文件,将有可能做到这一点使用更多的VBScript,允许进一步的发展,在你以后的日子如此希望。

下面的脚本假设你的“CIEB_Group3”保持在同一个地方(一个cd .. up,然后一个cd再次下降),并且该文本文件保持为“server.txt”并且只包含一个条目。

Set WshShell = CreateObject("WScript.Shell") 

'strpath = script execution directory 
strPath = WshShell.CurrentDirectory 
strPathReverse = StrReverse(strpath) 

'create the parent folder filepath, equivalent to cd.. 
strParentFilePath = Left(strPath, Len(StrPath) - InStr(strPathReverse,"\")) 

'open the text file, making the assumption it is in CIEB_Group3 and is called server.txt 
Set objfso = CreateObject("Scripting.FileSystemObject") 
Set textfile = objfso.OpenTextFile (strParentFilePath & "\CIEB_Group3\Server.txt", 1) 

'read the text file first line into a variable 
strNetworkShare = textfile.ReadLine 

'map the drive, chr(32) = <space>, chr(34) = " 
WshShell.Run "net use K:" & Chr(32) & Chr(34) & strNetworkShare & Chr(34) & Chr(32) & "/pers:yes", 1, 1 

另外,如果你仍然想使用单CMD线 - 你不妨尝试扩大环境变量CMD命令外,按以下。

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run "cmd /k cd.. & cd CIEB_Group3 & set /p RootServer=<Server.txt & net use K: " & wshShell.ExpandEnvironmentStrings("%RootServer%") & " /pers:yes", 1, True 
+0

谢谢山姆。不知道你可以像这样扩展cmd之外的环境变量。为了获得原始cmd的工作,我可以使用SET ENABLEDELAYEDEXPANSION吗?我试过了,似乎没有任何影响。 – Arch1medes

+0

我对CMD中的delayedexpansion没有任何经验,但基于文档,我期望它能够做到你需要的。你是否尝试添加/ V作为一个CMD参数(应该设置为第一个CMD参数)并用!'替换变量周围的变量%? –