3

我正在寻找有关环境变量 %COMPUTERNAME% 的帮助。它在我的脚本中作为以本地主机名命名文件的一种方式工作。在另一点上,我正在使用脚本在网络上的不同目录中构建一个文件夹(到映射驱动器),我需要将该文件夹命名为原始计算机的本地主机名。这可能没有意义,但我将在下面提供一个示例:

Comp1 = BobPC
Comp2 = JakePC

我正在 BobPC 上制作一个 zip 文件,然后将其复制到 JakePC,但我需要将此文件复制到... C:\CopiedFiles\BobPc 之类的目录中,因为此脚本将在许多计算机上运行,​​并且每个其中需要一个文件夹,文件所在的位置以它来自的计算机命名。

我希望这是有道理的。

现在我可以让它构建一个文件夹就好了,但它显然将其命名为“JakePC”的名称,因为我正在使用环境变量来获取本地主机名。

我的问题基本上是如何告诉它以原始计算机命名文件夹?

如果您有任何问题,请告诉我,我将非常乐意解释,因为我知道我可能没有多大意义。

4

2 回答 2

6

如果您从源 PC 运行脚本,您可以使用以下命令

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 的名称,所以不需要环境变量。

于 2012-07-27T13:25:18.423 回答
2

我找到了 2 个片段来获取主机名。在 windows 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方法以大写形式检索主机名。

于 2016-12-07T15:17:10.243 回答