2012-07-25 145 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方法检索大写的主机名。