Vbscript 使用变量命名新文本文件

Vbscript 使用变量命名新文本文件,vbscript,text-files,Vbscript,Text Files,我有一个小脚本,我想找到计算机的名称,并在闪存驱动器中创建一个文本文件,脚本将从中运行,并以计算机的名称命名 到目前为止,我可以将名称拉入一个变量,并使用字符串文字参数创建一个文本文件。但是,如果我尝试将名称传递到GetFileName和GetAbsolutePathName调用中,它要么给我一个错误,要么给文件一个空白名称 编辑:我已将代码更新为完整代码。该程序旨在获取我管理的实验室中所有计算机上的Windows许可证密钥,以便于参考。如果问题很简单,我很抱歉,这是我写的第一个脚本,我觉得我只

我有一个小脚本,我想找到计算机的名称,并在闪存驱动器中创建一个文本文件,脚本将从中运行,并以计算机的名称命名

到目前为止,我可以将名称拉入一个变量,并使用字符串文字参数创建一个文本文件。但是,如果我尝试将名称传递到
GetFileName
GetAbsolutePathName
调用中,它要么给我一个错误,要么给文件一个空白名称

编辑:我已将代码更新为完整代码。该程序旨在获取我管理的实验室中所有计算机上的Windows许可证密钥,以便于参考。如果问题很简单,我很抱歉,这是我写的第一个脚本,我觉得我只是缺少了一些东西

有关守则:

Set WshShell = CreateObject("WScript.Shell")
ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"))
Set wshShell = CreateObject( "WScript.Shell" )
strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )

Function ConvertToKey(Key)
  Const KeyOffset = 52
  i = 28
  Chars = "BCDFGHJKMPQRTVWXY2346789"
  Do
    Cur = 0
    x = 14
    Do
      Cur = Cur * 256
      Cur = Key(x + KeyOffset) + Cur
      Key(x + KeyOffset) = (Cur \ 24) And 255
      Cur = Cur Mod 24
      x = x - 1
    Loop While x >= 0
    i = i - 1
    KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
    If (((29 - i) Mod 6) = 0) And (i <> -1) Then
      i = i - 1
      KeyOutput = "-" & KeyOutput
    End If
  Loop While i >= 0
  ConvertToKey = KeyOutput
  Dim filesys, filetxt, getname, path
  Set filesys = CreateObject("Scripting.FileSystemObject")
  Set filetxt = filesys.CreateTextFile("I:\"& strComputerName & ".txt", True)
  path = filesys.GetAbsolutePathName("I:\"& strComputerName & ".txt")
  getname = filesys.GetFileName(path)
  filetxt.WriteLine(KeyOutPut)
  filetxt.Close
End Function
Set WshShell=CreateObject(“WScript.Shell”)
ConvertToKey(WshShell.regrad(“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId”))
设置wshShell=CreateObject(“WScript.Shell”)
strComputerName=wshShell.ExpandEnvironmentString(“%COMPUTERNAME%”)
功能转换键(键)
常数KeyOffset=52
i=28
Chars=“BCDFGHJKMPQRTVWXY2346789”
做
Cur=0
x=14
做
Cur=Cur*256
Cur=键(x+键偏移量)+Cur
键(x+KeyOffset)=(Cur\24)和255
Cur=Cur Mod 24
x=x-1
当x>=0时循环
i=i-1
KeyOutput=Mid(字符、电流+1、1)和KeyOutput
如果((29-i)Mod 6)=0)和(i-1),则
i=i-1
KeyOutput=“-”&KeyOutput
如果结束
当i>=0时循环
CONVERTOKEY=KeyOutput
Dim filesys、filetxt、getname、path
设置filesys=CreateObject(“Scripting.FileSystemObject”)
设置filetxt=filesys.CreateTextFile(“I:\”&strComputerName&“.txt”,True)
path=filesys.GetAbsolutePathName(“I:\”&strComputerName&“.txt”)
getname=filesys.GetFileName(路径)
filetxt.WriteLine(KeyOutPut)
filetxt.Close
端函数

结果是一个名为“.txt”的文本文件位于正确的位置。

必须将
strComputerName
传递到函数中,并在调用之前使用
call
关键字。

必须将
strComputerName
传递到函数中,并在调用前加上
call
关键字。

除非您在该驱动器上没有创建文件的适当权限,或者您的机器名包含非法字符(可能性很小),否则代码中没有任何明显的错误。您是否尝试过检查strComputerName的值?您是否正确定义了wshShell?是否在下一步的错误恢复中使用?您是否声明了此变量wshShell?您应该编辑问题并添加孔代码!您的代码中没有任何明显的错误,除非您在该驱动器上没有创建文件的适当权限,或者您的机器名包含非法字符(可能性很小)。您是否尝试过检查strComputerName的值?您是否正确定义了wshShell?是否在下一步的错误恢复中使用?您是否声明了此变量wshShell?您应该编辑问题并添加孔代码!只有在参数周围使用括号时,
Call
关键字才是必需的。这同样适用:
ConvertToKey WshShell.regrad(“…”),WshShell.ExpandEnvironmentStrings(“%COMPUTERNAME%”)
。或者您可以在调用
convertokey
之前移动
strComputerName=wshShell.ExpandEnvironmentStrings(“%COMPUTERNAME%”)
。您遇到的问题是因为在实际定义变量之前使用了变量
strComputerName
。只有在参数周围使用括号时才需要
Call
关键字。这同样适用:
ConvertToKey WshShell.regrad(“…”),WshShell.ExpandEnvironmentStrings(“%COMPUTERNAME%”)
。或者您可以在调用
convertokey
之前移动
strComputerName=wshShell.ExpandEnvironmentStrings(“%COMPUTERNAME%”)
。您遇到的问题是因为在实际定义变量之前使用了变量
strComputerName