Solved

VB Script Chokes on $ Symbol

Posted on 2010-11-29
14
452 Views
Last Modified: 2012-05-10
I am working on a vbscript to do some log parsing and I am now to the point where I am trying to do some special things. I am currently getting a windows script host issue when trying to call a variable containing a UNC path with a hidden folder declaration (notated by the $). The code snipped looks as follows:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFileDest = "\\fileserver\filelocation$\folder\cleanstats.csv"

if objFileDest.FileExists then
    set objFileW = objFSO.OpenTextFile(objFileDest, ForAppending)
  else
    Set objFileW = objFSO.CreateTextFile(objFileDest, ForWriting)
end if

Open in new window


The error message says:
Object required: '[string: "\\fileserver\filelocation"]'
Code: 800A01A8

It appears like storing a string with a $ in it is breaking my script. Any ideas how to escape that behavior?
0
Comment
Question by:lffit
  • 8
  • 4
  • 2
14 Comments
 
LVL 52

Expert Comment

by:Bill Prew
ID: 34234487
Try this, you have a few problems in that code.

Set objFSO = CreateObject("Scripting.FileSystemObject")
strFileDest = "\\fileserver\filelocation$\folder\cleanstats.csv"
if objFSO.FileExists(strFileDest) then
    set objFileW = objFSO.OpenTextFile(strFileDest, ForAppending)
  else
    Set objFileW = objFSO.CreateTextFile(strFileDest, ForWriting)
end if

Open in new window

0
 
LVL 52

Expert Comment

by:Bill Prew
ID: 34234501
I assume you had ForAppending and ForWriting defined somewhere else in the script as well.  If not, those will need to be handled, as in:

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Open in new window

0
 

Author Comment

by:lffit
ID: 34234555
You are correct with your updates to my code. That makes more sense, it is still dying at the $ though. Strange.
0
 

Author Comment

by:lffit
ID: 34234573
Perhaps having the code in full context would help:
Const ForReading = 1
Const ForWriting = 2
Const ForAppending =8

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("\\fileserver01\filelocation$\folder\perfstats01.txt", ForReading)
Set objFileDest = "\\fileserver01\filelocation$\folder\cleanstats.csv"

if objFSO.FileExists (strFileDest) then
    set objFileW = objFSO2.OpenTextFile(objFileDest, ForAppending)
  else
    Set objFileW = objFSO2.CreateTextFile(objFileDest, ForWriting)
end if

Open in new window


The concept is I open one file to read from and another file to append to. If the file to append to does not exist, then open a new file at the given location to write to. This is probably WAY simpler to do then I am making it.
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 34234608
Gee, that's weird.  I can do this just fine:

Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFileDest = "\\fileserver\folder$\testfile.txt"
Set objFileW = objFSO.OpenTextFile(strFileDest, ForAppending, True)
objFileW.Close

It works fine.  FYI, you can just use OpenTextFile, which will also create the file if it doesn't exist because of the last parameter being True.  Otherwise, if the file does exist, it will open it for appending.

Regards,

Rob.
0
 
LVL 52

Expert Comment

by:Bill Prew
ID: 34234609
I ran that exact code here with the changes and it got past the original problem.  I did of course get the error below since that sharename doesn't exist for me.

c:\temp\EE26645786.vbs(6, 5) Microsoft VBScript runtime error: Path not found

~bp
0
 
LVL 52

Expert Comment

by:Bill Prew
ID: 34234618
What error are you getting now with the changed code?

~bp
0
Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

 

Author Comment

by:lffit
ID: 34234652
Rob is making me think I fat fingered something along the way typing the original code. The code i am posting is cleaned with specific references knocked out. Let me start from scratch like he did and see what happens. This could be a PEBKAC issue.
0
 
LVL 52

Expert Comment

by:Bill Prew
ID: 34234653
One problem, you need to change:

Set objFileDest = "\\fileserver01\filelocation$\folder\cleanstats.csv"

to

objFileDest = "\\fileserver01\filelocation$\folder\cleanstats.csv"

See my changed code.

~bp
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 34234671
Well spotted Bill.  That's correct.  I didin't notice that.  You can't use the Set keyword with a string like that.  You could use
Set objFileDest = objFSO.GetFile("\\fileserver01\filelocation$\folder\cleanstats.csv")

but that would be incorrect seeing as you're doing the FileExists test anyway....

Rob.
0
 
LVL 52

Expert Comment

by:Bill Prew
ID: 34234691
Perhaps something more like this?

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Const cSourceFile = "\\fileserver01\filelocation$\folder\perfstats01.txt"
Const cDestFile = "\\fileserver01\filelocation$\folder\cleanstats.csv"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objSourceFile = objFSO.OpenTextFile(cSourceFile, ForReading)
Set objDestFile = objFSO.OpenTextFile(cDestFile, ForAppending)
' Do logic here...
objSourceFile.Close
objDestFile.Close

Open in new window

0
 
LVL 52

Accepted Solution

by:
Bill Prew earned 500 total points
ID: 34234697
Oops, forgot the important TRUE that Rob mentioned...

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Const cSourceFile = "\\fileserver01\filelocation$\folder\perfstats01.txt"
Const cDestFile = "\\fileserver01\filelocation$\folder\cleanstats.csv"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objSourceFile = objFSO.OpenTextFile(cSourceFile, ForReading)
Set objDestFile = objFSO.OpenTextFile(cDestFile, ForAppending, True)
' Do logic here...
objSourceFile.Close
objDestFile.Close

Open in new window

0
 
LVL 52

Expert Comment

by:Bill Prew
ID: 34236107
Did that makes sense?

~bp
0
 

Author Comment

by:lffit
ID: 34238378
There's what the issue was. That set was throwing the whole thing off.
SourceFile = "\\fileserver01\filelocation$\folder\perfstats01.txt"
DestFile = "\\fileserver01\filelocation$\folder\cleanstats.csv"

Open in new window

That corrected everything. Thanks for the help everyone.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this article, we will see the basic design consideration while designing a Multi-tenant web application in a simple manner. Though, many frameworks are available in the market to develop a multi - tenant application, but do they provide data, cod…
Restoring deleted objects in Active Directory has been a standard feature in Active Directory for many years, yet some admins may not know what is available.
This tutorial will walk an individual through the process of transferring the five major, necessary Active Directory Roles, commonly referred to as the FSMO roles from a Windows Server 2008 domain controller to a Windows Server 2012 domain controlle…
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now