# Need to modify VBS to append Number



## Solaris17 (Jul 29, 2013)

Hey guys I need to modify this script to append a file name instead of rewrighting it. I dont really know anything about VBS unfortunately and I can see where it is saying to over wright. but im unsure how to proceed.


```
' ' VBScript
Option explicit

' Next line is important, as it calls our function:
Wscript.Echo CopyAFile( "c:\HORWA05DS\PC\Installation", "\\10.204.103.19\version", "pc_release_id.txt")

' Next three lines illustrate correspondence of data to arguments:
''' strSourceFolder := "c:\HORWA05DS\PC\Installation"
''' strTargetFolder := "\\10.204.103.19\version"
''' strFileName := "pc_release_id.txt"
'

Wscript.Quit

Function CopyAFile( Byval strSourceFolder, Byval strTargetFolder, Byval strFileName)
'
' Presumptions: 
' strSourceFolder folder must exist
' strTargetFolder folder must exist
' strFileName file must exist in strSourceFolder folder
'  
Dim objFSO,[COLOR="Red"] booOverWrite[/COLOR], strResult
Set objFSO = CreateObject( "Scripting.FileSystemObject")
If objFSO.FileExists( strSourceFolder & "\" & strFileName) _
    And UCase( strSourceFolder) <> UCase( strTargetFolder) Then
  If objFSO.FolderExists( strTargetFolder) Then
  Else
    strResult = "The destination folder does not exist! In general, creating a folder may be a non-trivial task."
    CopyAFile = strResult
    Exit Function
  End If
  [COLOR="red"]If objFSO.FileExists( strTargetFolder & "\" & strFileName) Then
    strResult = "The file exists, overwritten"
    booOverWrite = vbTrue[/COLOR]
  Else
    strResult = "The file does not exist, created"
    booOverWrite = vbFalse
  End If
  objFSO.CopyFile strSourceFolder & "\" & strFileName, strTargetFolder & "\", [COLOR="red"]booOverWrite[/COLOR]
Else
  strResult = "The source file does not exist, or identical Source and Target folders!"
End If
CopyAFile = strResult
End Function
```

Can anyone help me out? Basically I have this script working as it should. I need to pull this file and dump it on a network folder so we can monitor that a specific program version is being used. however I need it to append so that I can make sure when an update hits that its being updated. I have multiple PCs dumping this file. Maybe VBS can pull a computer name and append that instead?


----------



## Sasqui (Jul 29, 2013)

Not sure if this helps:



> strFile = InputBox ("Enter File Name",,"C:\MyFile.Txt")
> Const ForAppending = 8
> 
> set objFSO = CreateObject("Scripting.FileSystemObject")
> ...



The ForAppending variable does this:
CONSTANT VALUE DESCRIPTION 
ForReading 1 Opens a file for reading only 
ForWriting 2 Opens a file for writing. If the file already exists, the contents are overwritten. 
ForAppending 8 Opens a file and starts writing at the end (appends). Contents are not overwritten. 

http://www.devguru.com/technologies/VBScript/14075

http://myitforum.com/cs2/blogs/dhit...cript-to-append-to-a-specified-text-file.aspx


----------



## Solaris17 (Jul 29, 2013)

Sasqui said:


> Not sure if this helps:
> 
> 
> 
> ...



I will try this later thanks


----------



## FordGT90Concept (Jul 29, 2013)

You just want to add the computer name to the file name?

First, it should be duly noted that modifying this function would result in changes to all places it is used so there may be major unintended consequences.

Second, is this script running on client computers or a server?  If it is on server, getting the computer name could be problematical.

Third, maybe it would be better if a more advanced program parsed the log on the client and submitted something to a server application which collates and displays it.  Combing through lots of text files checking version numbers sounds tedious to me.


For potential future reference: http://www.codeproject.com/Articles/3183/Enhanced-EventLog-writing-for-NET-Applications


----------



## Solaris17 (Jul 29, 2013)

FordGT90Concept said:


> You just want to add the computer name to the file name?
> 
> First, it should be duly noted that modifying this function would result in changes to all places it is used so there may be major unintended consequences.
> 
> ...



I just want the Pc name appended. We currently use a specific schema for the names which would help us isolate which Pcs are not updating. This script runs on the client machines copying the version file the program creates to a server that has a shared drive.

the script as is works. but it overwrites and I cant have it do that because then their would be no way to isolate which PCs arent updating.


----------



## FordGT90Concept (Jul 29, 2013)

In which case...

Edit: ABORT: logical error!

Edit: Fixed...

```
' ' VBScript
Option explicit

' Next line is important, as it calls our function:
Wscript.Echo CopyAFile( "c:\HORWA05DS\PC\Installation", "\\10.204.103.19\version", "pc_release_id.txt")

' Next three lines illustrate correspondence of data to arguments:
''' strSourceFolder := "c:\HORWA05DS\PC\Installation"
''' strTargetFolder := "\\10.204.103.19\version"
''' strFileName := "pc_release_id.txt"
'

Wscript.Quit

Function CopyAFile( Byval strSourceFolder, Byval strTargetFolder, Byval strFileName)
'
' Presumptions: 
' strSourceFolder folder must exist
' strTargetFolder folder must exist
' strFileName file must exist in strSourceFolder folder
'  
Dim objFSO, booOverWrite, strResult[color=red], WshNetwork, strDestFileName

Set WshNetwork = CreateObject("WScript.Network")
strDestFileName = WshNetwork.ComputerName & "_" & strFileName ' COMPUTERNAME_FILENAME

[/color]Set objFSO = CreateObject( "Scripting.FileSystemObject")
If objFSO.FileExists( strSourceFolder & "\" & strFileName) _
    And UCase( strSourceFolder) <> UCase( strTargetFolder) Then
  If objFSO.FolderExists( strTargetFolder) Then
  Else
    strResult = "The destination folder does not exist! In general, creating a folder may be a non-trivial task."
    CopyAFile = strResult
    Exit Function
  End If
  If objFSO.FileExists( strTargetFolder & "\" & [color=red]strDestFileName[/color]) Then
    strResult = "The file exists, overwritten"
    booOverWrite = vbTrue
  Else
    strResult = "The file does not exist, created"
    booOverWrite = vbFalse
  End If
  objFSO.CopyFile strSourceFolder & "\" & strFileName, strTargetFolder & "\" [color=red]& strDestFileName[/color], booOverWrite
Else
  strResult = "The source file does not exist, or identical Source and Target folders!"
End If
CopyAFile = strResult
End Function
```


This is untested code so...enter at your own risk.


----------



## FordGT90Concept (Jul 29, 2013)

I put the code back up.  It should work...theoretically.


----------



## Solaris17 (Jul 29, 2013)

FordGT90Concept said:


> In which case...
> 
> Edit: ABORT: logical error!
> 
> ...



Sweet deal works mint thanks a bunch!


----------



## Deleted member 3 (Jul 29, 2013)

Replace strfilename with strfilename & environ("computername") or something.


----------

