【问题标题】:VBScript Environment Variable %COMPUTERNAME%VBScript 环境变量 %COMPUTERNAME%
【发布时间】:2012-07-25 17:04:58
【问题描述】:

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

Comp1 = BobPC
Comp2 = JakePC

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

我希望这是有道理的。

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

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

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

【问题讨论】:

  • 您能更具体地谈谈您的问题吗?比如:如何创建文件夹,或者如何在远程PC上工作,或者如何获取计算机名。
  • 脚本正在一台机器上运行,它正在另一台机器上生成一个文件夹,但我需要将该文件夹命名为运行脚本的机器的主机名。跨度>
  • 可以从%COMPUTERNAME%环境变量中获取主机名。该变量将始终是源文件所在的本地主机名,因为脚本将始终在本地运行。如果脚本在“JakePC”上运行,那么它将在远程计算机上生成一个名为“JakePC”的文件夹。就像您在帖子中已经说明的那样。或者您是否尝试使用 remote 主机名来命名文件夹?
  • 是的,我可以用它来构建文件夹就好了。我正在做的是让它在本地机器上使用主机名构建文件夹,然后在我压缩或复制任何东西之前到远程机器上。当我尝试复制我在本地压缩的文件时,我的问题出现了,它无法使用路径中的计算机名环境变量识别路径。所以它只是没有正确复制
  • 远程 PC 是否已经存在所需的路径?例如:Z:\CopiedFiles\BobPC 假设 Z: 映射到 \\JakePC\DriveC。如果该路径不存在,您必须先创建它。如有必要,一次一个子文件夹。否则会报错。

标签: vbscript environment-variables


【解决方案1】:

如果您从源电脑运行脚本,您可以使用以下内容

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

如果你从目标电脑运行它,你应该使用远程脚本,但这并不聪明,因为你必须知道你需要运行它的电脑的名称,所以不需要环境变量。

【讨论】:

  • "oFso.CopyFile(source, target, overwrite)" - 语法错误 1044,“调用 Sub 时不能使用括号”
  • 无法测试这个,在这种情况下,只需删除括号或在它前面打一个电话,我会调整答案,谢谢 Ekkehard
  • 感谢您的回复。我设法让脚本正常工作。关于错误位置的括号/刻度线,这更像是我的一个“duh”错误。相当烦人的想法是我有一些根本性的错误。
  • 彼得,有没有我可以给你发一份这个脚本的副本,你可以快速浏览一下吗?这是我的第一个脚本,所以我正在努力从中获得尽可能多的学习经验,对它进行良好的评论会很有帮助。
  • 当然,但为什么不在这里发布呢?我不是唯一可以帮助您的 vbscript uer。编辑您的答案,或者如果太大,请将其放在 github 上并在此处放置链接
【解决方案2】:

我找到了 2 个 sn-ps 来获取主机名。在 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方法检索大写的主机名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-07
    • 2014-09-30
    • 2020-12-07
    • 1970-01-01
    • 2010-10-28
    • 2014-12-17
    相关资源
    最近更新 更多