2017-06-12 57 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參數)並用!'替換變量周圍的變量%? –