VBScript环境变量%COMPUTERNAME%

VBScript环境变量%COMPUTERNAME%,vbscript,environment-variables,Vbscript,Environment Variables,我正在寻找有关环境变量%COMPUTERNAME%的帮助。在我的脚本中,它是以本地主机名命名文件的一种方法。另一方面,我正在使用脚本在网络上的不同目录中构建一个文件夹(映射到一个驱动器),我需要将该文件夹命名为原始计算机的本地主机名。这可能没有意义,但我将在下面提供一个示例: Comp1 = BobPC Comp2 = JakePC 我正在BobPC上制作一个zip文件,然后将其复制到JakePC,但我需要将该文件复制到一个目录中,如。。。C:\CopiedFiles\BobPc,因为此脚本将

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

Comp1 = BobPC
Comp2 = JakePC
我正在BobPC上制作一个zip文件,然后将其复制到JakePC,但我需要将该文件复制到一个目录中,如。。。C:\CopiedFiles\BobPc,因为此脚本将在许多计算机上运行,并且每个计算机都需要一个文件夹,文件将位于该文件夹中,该文件夹以文件来自的计算机命名

我希望这是有道理的

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

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


如果你有任何问题,让我知道,我将非常乐意解释,因为我知道我可能没有太多的意义

如果从源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的名称,因此不需要环境变量。

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

您能更具体地回答您的问题吗?例如:如何创建文件夹,或如何在远程PC上工作,或如何获取计算机名。脚本正在一台计算机上运行,它正在另一台计算机上生成文件夹,但我需要将文件夹命名为运行脚本的计算机的主机名。您可以从
%COMPUTERNAME%
环境变量获取主机名。该变量将始终是源文件所在的本地主机名,因为脚本将始终在本地运行。如果脚本在“JakePC”上运行,那么它将在远程计算机上生成一个名为“JakePC”的文件夹。就像你在帖子里说的那样。或者您正在尝试使用远程主机名命名文件夹?是的,我可以让它很好地构建文件夹。我所做的是让它在本地机器上构建带有主机名的文件夹,在我压缩或复制任何内容之前,将其转移到远程机器上。我的问题是,当我试图复制本地压缩的文件时,它将无法使用路径中的computername环境变量识别路径。因此,它无法正确复制远程PC是否已经存在所需的路径?e、 g.:
Z:\CopiedFiles\BobPC
假设
Z:
映射到
\\JakePC\DriveC
。如果该路径尚未出现,则必须首先创建它。如有必要,一次一个子文件夹。否则,您将得到一个错误。“oFso.CopyFile(source、target、overwrite)”-语法错误1044,“调用Sub时不能使用括号”无法测试此子文件,在这种情况下,只需删除括号或在其之前进行调用,我将调整答案,谢谢Ekkehard谢谢您的回复。我已设法使脚本正常工作。这更像是我在错误位置上的“duh”错误。彼得,有没有什么我可以给你发一份这个脚本的副本,你可以快速查看一下?这是我的第一个剧本,所以我正试图从中获得尽可能多的学习经验,对它进行一次好的评论将非常有帮助。当然,但为什么不在这里发表呢?我不是唯一能帮你的人。编辑你的答案,或者如果答案太大,把它放在github上,并在这里放一个链接