【问题标题】:how to manipulate argument in VB Script?如何在 VB 脚本中操作参数?
【发布时间】:2016-07-25 01:32:23
【问题描述】:

我正在尝试自动创建快捷方式,但不知道如何从参数中获取文件名。代码运行为:

cscript 快捷方式.vbs "c:\folder\targetfile.ext"

Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile= objArgs(0)
Set objFile = objFS.OpenTextFile(strFile)
Set objFile = objFS.GetFile(strFile)
WScript.Echo objFile.Path 

Set oWS = WScript.CreateObject("WScript.Shell") 
sLinkFile = "c:\myfolder\myshortcut.lnk" 
Set oLink = oWS.CreateShortcut(sLinkFile) 
oLink.TargetPath = objFile.Path 
oLink.Save

是否可以在以下行中将用户指定的文件夹和从参数自动生成的文件名与 .lnk 扩展名结合起来

sLinkFile = "c:\myfolder\myshortcut.lnk"

到这样的事情:

sLinkFile = "c:\myfolder\" + filenamefromargument(e.g targetfile) + ".lnk"

提前谢谢 :)

【问题讨论】:

  • sLinkFile = "c:\myfolder\" & objArgs(0) & ".lnk"。不要使用加号,它只适用于与旧的基础兼容,如果两个字符串都包含数字,它们将被添加而不是连接。
  • 哈哈。我不打算真正使用它:) 这只是一个“艺术”的观点应该如何发展
  • 为了真正的编程效率,使用strFile 而不是objArgs(0)。 strfile 是一个变量,因此 CPU 很容易通过它在堆栈中的内存地址来引用它。 objArgs(0) 表示objArgs.item(0),它是通过 COM 调用的函数。因此创建了一个新堆栈,将返回地址、参数和局部变量(对item 方法)放入堆栈,然后运行代码。然后这一切都撤消了,将旧的堆栈框架保留为当前的堆栈框架。这要慢很多。主体如果多次使用一个属性,请插入一个变量。
  • 不幸的是,您的两个解决方案都不起作用,无论是 sLinkFile = "c:\myfolder\" & objArgs(0) & ".lnk" 还是 sLinkFile = "c:\myfolder\" & strfile & “.lnk”。很抱歉让我很烦,但我对脚本和东西的了解为零,甚至在这里格式化评论:(

标签: vbscript arguments shortcut


【解决方案1】:

@Noodles 的第一个建议会起作用 - 而他的第二个建议只是意味着您应该在使用之前分配strFile = objArgs(0)

您的“伪示例”只是让每个人都感到困惑
您首先指定 "c:\folder\targetfile.ext" 作为参数
然后sLinkFile = "c:\myfolder\myshortcut.lnk" 我认为你的意思是sLinkFile = "c:\myfolder\myshortcut.ext"

您需要的第二部分是查看 FileSystemObject 方法以提取文件夹和基本名称 - 然后附加您的扩展名

类似:

之后 strFile= objArgs(0)

插入此代码:

With objFS    
   strLinkFile = .GetParentFolderName(strFile) & .GetBaseName(strFile) & ".lnk"
End With

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多