2012-07-25 56 views
3

我正在尋找一些有關環境變量%COMPUTERNAME%的幫助。它在我的腳本中工作,作爲在本地主機名後命名文件的一種手段。在另一點上,我正在使用該腳本在網絡上的另一個目錄(映射的驅動器)中生成一個文件夾,我需要將該文件夾命名爲原始計算機的本地主機名。這可能是沒有意義,但我會在下面提供一個例子:VBScript環境變量%COMPUTERNAME%

Comp1 = BobPC 
Comp2 = JakePC 

我正在上BobPC,然後將其複製到JakePC一個zip文件,但我需要這個文件被複制到類似於目錄... C:\ CopiedFiles \ BobPc,因爲此腳本將在多臺計算機上運行,​​並且每個計算機都需要一個文件夾所在的文件夾。

我希望這是有道理的。

現在我可以讓它建立一個文件夾,但它將它命名爲「JakePC」,顯然是因爲我使用環境變量來獲取本地主機名。

我的問題基本上是我怎麼能告訴它命名文件夾後的原始計算機?

如果您有任何問題請告訴我,我會很樂意解釋,因爲我知道我可能沒有太大意義。

+0

你能對你的問題更具體嗎?像:如何創建一個文件夾,或如何在遠程PC上工作,或如何獲取計算機名稱。 – Jay 2012-07-25 19:37:21

+0

該腳本正在一臺計算機上運行,​​並且正在另一臺計算機上生成文件夾,但我需要將該文件夾命名爲正在運行該腳本的計算機的主機名。 – parchambeau 2012-07-25 23:12:39

+0

您可以從'%COMPUTERNAME%'環境變量中獲取主機名。該變量將始終是源文件所在的本地主機名,並且由於腳本始終在本地運行。如果腳本在「JakePC」上運行,那麼它將在遠程計算機上生成一個名爲「JakePC」的文件夾。就像你已經在帖子中陳述的那樣。或者你想用* remote *主機名命名文件夾? – Jay 2012-07-25 23:35:03

回答

6

如果你從源計算機運行腳本,你可以使用下面的

dim oFso, oShell, oShellEnv, computerName, target, source 
const overwrite = true 
set oFso  = CreateObject("Scripting.FileSystemObject") 
set oShell = WScript.CreateObject("WScript.Shell") 
set oShellEnv = oShell.Environment("Process") 
computerName = oShellEnv("ComputerName") 
source = "c:\test\yourZip.zip" 
target = "\\JakePC\copiedFiles\" & computerName & ".zip" 
'copiedFiles needs to be a share with write permission for the user who runs the script 
oFso.CopyFile source, target, overwrite 
'do check on errors and the cleanup of your objects 

的情況下,你從targetpc運行它,你應該使用遠程腳本,但是這不會是聰明的,因爲你必須知道你需要運行它的PC的名稱,因此不需要環境變量。

+0

「oFso.CopyFile(source,target,overwrite)」 - 語法錯誤1044,'調用Sub時不能使用圓括號' – 2012-07-27 13:34:33

+0

無法測試這一個,在這種情況下,只需刪除括號或在它之前撥打電話,我我會修改答案,謝謝Ekkehard – peter 2012-07-27 14:05:15

+0

謝謝你的迴應。我設法讓腳本工作。這對我來說只是關於錯誤位置上的父親/蜱標記的一個「嘟嘟」錯誤。相當惱人的想法,我有一些根本錯誤的東西。 – parchambeau 2012-07-27 14:24:23

2

我找到了2個片段來獲取主機名。既運行在視窗7確定SP1和Windows Server 2012:

' 
' How to get the hostname 
' 
' References 
' 
' Method1: http://www.robvanderwoude.com/vbstech_network_names_hostname.php 
' method2: https://msdn.microsoft.com/en-us/library/s6wt333f(v=vs.84).aspx 

WScript.Echo "Method 1 " 

Set wshShell = WScript.CreateObject("WScript.Shell") 
strRegValue = "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Hostname" 
strHostName = wshShell.RegRead(strRegValue) 
WScript.Echo "Host Name: " & strHostName 

WScript.Echo "Method 2 (include other network values)" 

Set WshNetwork = WScript.CreateObject("WScript.Network") 
WScript.Echo "Domain = " & WshNetwork.UserDomain 
WScript.Echo "Computer Name = " & WshNetwork.ComputerName 
WScript.Echo "User Name = " & WshNetwork.UserName 

所不同的是WshNetwork.ComputerName方法檢索大寫的主機名。