windows - Brug VBS til at læse fra en tekstfil og sammenligne med CSV for at skabe betingelsesafhængig genvej

Indlæg af Hanne Mølgaard Plasc

Problem



Forsøger at læse en enkelt værdi i en tekstfil og bruge den værdi til at matche en position på et csv for at generere en unik genvej med argumenter. Jeg har problemer med at finde fejlen i min VBS logik i scriptet nedenfor:


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:ProgramDataMicrosoftWindowsStart MenuProgramsGenericGeneric.lnk"
    TargetPath = "\%SystemRoot\%GenericGeneric.exe"
    Set shortcut = WSHShell.CreateShortcut(fullname)
    shortTarget = shortcut.TargetPath
    shortcut.Arguments = "s=" & strServerFQDN & " p=" & strPort
    shortcut.save
    fullname = "C:UsersPublicDesktopGeneric.lnk"
     TargetPath = "\%SystemRoot\%GenericGeneric.exe"
    Set shortcut = WSHShell.CreateShortcut(fullname)
    shortTarget = shortcut.TargetPath
    shortcut.Arguments = "s=" & strServerFQDN & " p=" & strPort
    shortcut.save
  end if
Loop


Jeg undrer mig over, om jeg skal indlæse både csv- og txt-filen i en matrix for at oprette genvej med de korrekte oplysninger.


Ressourcer:


servers.csv (filen indeholder info i formatet nedenfor)


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


code.txt (filen indeholder kun en linje, som er siteidentifikator)


site1

Bedste reference


Hvis du d udfører scriptet fra et åbent cmd vindue med


cscript YourScriptName.vbs


du vil se fejlmeddelelsen. Jeg synes du skal ændre linjerne


shortTarget = shortcut.TargetPath


til


shortcut.Target = TargetPath


eller bedre direkte til


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

Andre referencer 1


Som det fremgår af et svar på LotPings (tak for din tilbagemelding!) Var spørgsmålet, at readall-kommandoen hentede indholdet af tekstfilen for at inkludere CRLF i slutningen af ​​Site1-værdien. Det var ikke indlysende, at disse tegn var til stede indtil åbningen af ​​txt-filen i en editor, der ville vise alle tegn.


Korrigeret og funktionel kode er:


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:ProgramDataMicrosoftWindowsStart MenuProgramsGenericGeneric.lnk"
    Set shortcut = WSHShell.CreateShortcut(fullname)
    shortcut.TargetPath = "\%SystemRoot\%GenericGeneric.exe"
    shortcut.Arguments = "s=" & strServerFQDN & " p=" & strPort
    shortcut.WorkingDirectory = "\%SystemRoot\%Generic"
    shortcut.save
    'Desktop Icon Creation Here
    fullname = "C:UsersPublicDesktopGeneric.lnk"
    Set shortcut = WSHShell.CreateShortcut(fullname)
    shortcut.TargetPath = "\%SystemRoot\%GenericGeneric.exe"
    shortcut.Arguments = "s=" & strServerFQDN & " p=" & strPort
    shortcut.WorkingDirectory = "\%SystemRoot\%Generic"
    shortcut.save
  Exit Do
 end if
 Loop