使用VBS从一个文本文件中读取并与CSV进行比较以创建条件相关的快捷方式

时间:2017-01-20 15:13:19

标签: windows vbscript wsh

尝试读取文本文件中的单个值,并使用该值匹配csv上的位置,以便生成带参数的唯一快捷方式。我在下面的脚本中找不到我的VBS逻辑中的错误:

dim objFS,objFileToRead,objTextFile, strSiteCode, strServerFQDN, strPort, mySiteCode
dim arrStr

strComputer = "."
Set objFS = CreateObject("Scripting.FileSystemObject")
set objTextFile = objFS.OpenTextFile("Servers.csv")
Set objFileToRead = objFS.OpenTextFile("code.txt",1)
Set mySiteCode = objFileToRead.ReadAll()
Set WSHShell = CreateObject("WScript.Shell")


Do while NOT objTextFile.AtEndOfStream
  arrStr = Split(objTextFile.ReadLine,",")
  strSiteCode = arrStr(0)
  strServerFQDN = arrStr(1)
  strPort = arrStr(2)
  if mySiteCode = strSiteCode then
    'wscript.echo "Site Code: " & strSiteCode & " - Server FQDN: " & strServerFQDN & " - Port #: " & strPort
    fullname = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Generic\Generic.lnk"
    TargetPath = "%SystemRoot%\Generic\Generic.exe"
    Set shortcut = WSHShell.CreateShortcut(fullname)
    shortTarget = shortcut.TargetPath
    shortcut.Arguments = "s=" & strServerFQDN & " p=" & strPort
    shortcut.save
    fullname = "C:\Users\Public\Desktop\Generic.lnk"
     TargetPath = "%SystemRoot%\Generic\Generic.exe"
    Set shortcut = WSHShell.CreateShortcut(fullname)
    shortTarget = shortcut.TargetPath
    shortcut.Arguments = "s=" & strServerFQDN & " p=" & strPort
    shortcut.save
  end if
Loop

我想知道是否需要将csv和txt文件加载到数组中,以便使用正确的信息创建快捷方式。

资源:

servers.csv(文件包含以下格式的信息)

Site1,10.0.0.1,12345 Site2,10.0.0.2,23456 ...

code.txt(文件只包含一行是站点标识符)

站点1

2 个答案:

答案 0 :(得分:0)

如果您使用

从打开的cmd窗口执行脚本
cscript YourScriptName.vbs

您将看到错误消息。我认为你应该改变这些行

shortTarget = shortcut.TargetPath

shortcut.Target = TargetPath

或更好直接

shortcut.Target = "%SystemRoot%\Generic\Generic.exe"

答案 1 :(得分:0)

正如对LotPings的回复中所述(感谢您的反馈!)问题是readall命令正在拾取文本文件的内容以在Site1值的末尾包含CRLF。在显示所有字符的编辑器中打开txt文件之前,这些字符不存在并不明显。

更正和功能代码是:

dim objFS,objFileToRead,objTextFile, strSiteCode, strServerFQDN, strPort, mySiteCode
dim arrStr

strComputer = "."
Set objFS = CreateObject("Scripting.FileSystemObject")
set objTextFile = objFS.OpenTextFile("Servers.csv")
Set objFileToRead = objFS.OpenTextFile("code.txt",1)
mySiteCode = objFileToRead.ReadLine()
Set WSHShell = CreateObject("WScript.Shell")

Do while NOT objTextFile.AtEndOfStream
  arrStr = Split(objTextFile.ReadLine,",")
  strSiteCode = arrStr(0)
  strServerFQDN = arrStr(1)
  strPort = arrStr(2)
  if trim(mySiteCode) = trim(strSiteCode) then
    'Start Menu Icon Creation Here
    fullname = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Generic\Generic.lnk"
    Set shortcut = WSHShell.CreateShortcut(fullname)
    shortcut.TargetPath = "%SystemRoot%\Generic\Generic.exe"
    shortcut.Arguments = "s=" & strServerFQDN & " p=" & strPort
    shortcut.WorkingDirectory = "%SystemRoot%\Generic"
    shortcut.save
    'Desktop Icon Creation Here
    fullname = "C:\Users\Public\Desktop\Generic.lnk"
    Set shortcut = WSHShell.CreateShortcut(fullname)
    shortcut.TargetPath = "%SystemRoot%\Generic\Generic.exe"
    shortcut.Arguments = "s=" & strServerFQDN & " p=" & strPort
    shortcut.WorkingDirectory = "%SystemRoot%\Generic"
    shortcut.save
  Exit Do
 end if
 Loop