【问题标题】:Use a variable in file path in .vbs在 .vbs 的文件路径中使用变量
【发布时间】:2011-09-23 20:28:29
【问题描述】:

是否可以在 .vbs 的路径中使用变量。我的基本情况是我有一个 vbs 脚本,该脚本通常会在一个人登录的计算机上运行,​​并由具有完全不同用户名的管理员运行(假设该文件将被右键单击并“运行为”)。

脚本为登录的人编辑位于用户目录中的 ini 文件。我知道在批处理中我可以简单地插入变量 "C:\Users\%Logger%\AppData\Local\stat.ini" 并且该变量将被替换。但我不能在.vbs 中做到这一点。到目前为止我的剧本。或者在答案here 中查看大部分内容。

Dim blnRes: blnRes = 0
Dim strOld, strNew, logger
strOld = "frogg"
strNew = "frog"
logger = Inputbox("What is your Domain ID exactly as entered when you log into this machine?","Domain ID")

On Error Resume Next
Call update("C:\Users\logger\AppData\Local\stat.ini", strOld, strNew)
blnRes = blnRes Or (Err.Number = 0): Err.Clear

有什么方法可以将logger 标记为变量,或者有更简单的方法吗?

【问题讨论】:

    标签: variables vbscript


    【解决方案1】:

    我猜你的意思是一个脚本变量。试试这个:

    logger = Inputbox("What is ID?","Domain ID")
    Call update("C:\Users\"& logger &"\AppData\Local\stat.ini", strOld, strNew)
    

    【讨论】:

      【解决方案2】:

      您可以在 vbs 中使用命令行参数。请参阅以下技术网站: http://technet.microsoft.com/en-us/library/ee156618.aspx

      使用底部的示例 vbs,您可以让 Ping.vbs 根据调用时在脚本名称后输入的计算机名称(C:\scripts\Ping.vbs 主机名)进行回复

      这里是关于 WScript.Aurguments 的更多信息 https://www.google.com/search?q=WScript.Arguments&sourceid=ie7&rls=com.microsoft:en-us:IE-Address&ie=&oe=


      'Ping.vbs:
      Dim arArguments, strArgument
      Set arArguments = WScript.Arguments
      WScript.Echo WScript.Arguments.Count
      For Each strArgument in arArguments
      If Ping(strArgument) Then
          WScript.Echo strArgument & " is available."
      Else
          WScript.Echo strArgument & " is not available."
      End If  
      Next 
      Function Ping( myHostName )
      Dim colPingResults, objPingResult, strQuery
      strQuery = "SELECT * FROM Win32_PingStatus WHERE Address = '" & myHostName & "'"
      Set colPingResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )
      For Each objPingResult In colPingResults
          If Not IsObject( objPingResult ) Then
              Ping = False
          ElseIf objPingResult.StatusCode = 0 Then
              Ping = True
          Else
              Ping = False
          End If
      Next
      Set colPingResults = Nothing
      End Function
      

      【讨论】:

        【解决方案3】:

        如果我正确理解了您的需求,您要么需要进行字符串连接,在其中构建像 "string part 1" & logger & "string part 2" 这样的字符串,要么使用替换函数替换 %Logger%(例如 Replace(templateString, "%Logger%", logger))使用您的记录器变量。没有直接等效于批处理文件中使用的%1 格式。

        【讨论】:

          【解决方案4】:

          这对我有用:

          Dim fs, ws, Path
          Set ws = CreateObject( "WScript.Shell" )
          Path = ws.ExpandEnvironmentStrings( "%UserProfile%\testfile.txt" )
          ws = Nothing
          Set fs = CreateObject("Scripting.FileSystemObject")
          Set f = fs.CreateTextFile (Path, True)
          f.WriteLine("This is a test")
          f.Close()
          f = Nothing
          

          不要假设“C:\Users”在每个系统上都有效。有时您可能希望为用户配置文件使用不同的位置。我还查看了 %AppData% 环境变量,但在我的情况下,它指向 AppData\Roaming,而您需要 AppData\Local。

          【讨论】:

          • C:\Users 并非在每个系统上都有效,在我们的环境中,我们有使用文档和设置的 XP 以及在服务器上存储用户配置文件的几个站点。我正计划确定操作系统并有条件地运行带有目录的行。无论如何,我继续测试了脚本,它遇到了同样的问题,它调用了运行该文件的任何人的用户配置文件。我将编辑帖子以使其更清晰,对此感到抱歉。
          猜你喜欢
          • 1970-01-01
          • 2015-06-23
          • 1970-01-01
          • 2021-03-13
          • 2011-05-19
          • 1970-01-01
          • 2023-03-24
          • 2019-03-15
          相关资源
          最近更新 更多