Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1021
  • Last Modified:

Rename File from FTP

I'm trying to create a vbs that will pull files from ftp and rename one of them. I have the ftp part working great but I can't figure out how to rename the file I need

The file needs to go from this ExportTemplate_0_20101119000037.txt to this LAST_EXPORT.txt
 Here is a list of files that get downloaded

ExportTemplate_0_20101117000024.txt
ExportTemplate_0_20101118000052.txt
ExportTemplate_0_20101119000037.txt

So I was think maybe of triming off the last six caracters so then it would be ExportTemplate_0_20101119.txt then just rename the file with todays date in the file name.


strScript = "runftp.txt"
strSite = "ftp.site.com"
strUsername = "Username"
strPassword = "Password" 
strFileName = "*.txt"
strDirectory = "c:\RTA_FILES"
strPrefix = "ExportTemplate_0"
strComputer = "."
strDayName = WeekDayName(Weekday(Date))
strLastFileName = strPrefix & "_" & YYYYMMDD(Date) & "0000" & ".txt"

strFullPath = strDirectory & "\" & strLastFileName
MsgBox strFullPath
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objShell: Set objShell=CreateObject("Wscript.Shell")

If objFSO.FolderExists(strDirectory) Then
Else
   objFSO.CreateFolder(strDirectory)
End If


Set objScript = objFSO.CreateTextFile(strDirectory & "\" & strScript, True)
objScript.WriteLine "open " & strSite
objScript.WriteLine strUsername
objScript.WriteLine strPassword
objScript.WriteLine "lcd " & strDirectory
objScript.WriteLine "mget " & Chr(34) & strFileName & Chr(34)
objScript.WriteLine "bye "
objScript.Close
 
Set objShell = CreateObject("WScript.Shell")
objShell.Run "ftp -i -s:" & Chr(34) & strScript & Chr(34) 
objFSO.DeleteFile(strDirectory & "\" & strScript), True

 Function YYYYMMDD(dtmTime)
    strMonth = Right("0" & Month(dtmTime), 2)
    strDay = Right("0" & Day(dtmTime), 2)
    strYear = Right(Year(dtmTime), 4)
    
    YYYYMMDD = strYear & strMonth & strDay
End Function

Open in new window

0
JHopkins213
Asked:
JHopkins213
  • 2
  • 2
  • 2
1 Solution
 
stavros41Commented:
Try this:
Dim objFSO

Set objFSO = CreateObject("Scripting.FileSystemObject")

strDirectory = "C:\TEMP"

Set objFolder = objFSO.GetFolder(strDirectory & "\")
For Each item In objFolder.Files
  If InStr(item.Name, "ExportTemplate") <> 0 Then
  	 strNewName = "LAST_EXPORT.txt"
	 item.Name = strNewName	 
  End If    
Next

Open in new window

0
 
JHopkins213Author Commented:
Gives and error about file already exists

I have multiple files I need to rename the last one

Example

C:\RTA_FILES\ExportTemplate_0_20101116000004.txt
C:\RTA_FILES\ExportTemplate_0_20101117000024.txt
C:\RTA_FILES\ExportTemplate_0_20101118000052.txt
C:\RTA_FILES\ExportTemplate_0_20101119000037.txt <-- This is the newest file in the directory and it needs to be renamed to LAST_EXPORT.txt
0
 
stavros41Commented:
Is it always the same file name? If so change this line:
If InStr(item.Name, "ExportTemplate_0_20101119000037") <> 0 Then

Open in new window

0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
Bill PrewCommented:
How about this?

strScript = "runftp.txt"
strSite = "ftp.site.com"
strUsername = "Username"
strPassword = "Password" 
strFileName = "*.txt"
strDirectory = "c:\RTA_FILES"
strPrefix = "ExportTemplate_0"
strComputer = "."
strDayName = WeekDayName(Weekday(Date))
strLastFileName = strPrefix & "_" & YYYYMMDD(Date) & "*" & ".txt"
strFullPath = strDirectory & "\" & strLastFileName
MsgBox strFullPath

Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objShell: Set objShell=CreateObject("Wscript.Shell")

If Not objFSO.FolderExists(strDirectory) Then
   objFSO.CreateFolder(strDirectory)
End If

Set objScript = objFSO.CreateTextFile(strDirectory & "\" & strScript, True)
objScript.WriteLine "open " & strSite
objScript.WriteLine strUsername
objScript.WriteLine strPassword
objScript.WriteLine "lcd " & strDirectory
objScript.WriteLine "mget " & Chr(34) & strFileName & Chr(34)
objScript.WriteLine "bye "
objScript.Close
 
Set objShell = CreateObject("WScript.Shell")
objShell.Run "ftp -i -s:" & Chr(34) & strScript & Chr(34) 
objFSO.DeleteFile(strDirectory & "\" & strScript), True

objFSO.CopyFile strFullPath, strDirectory & "\Last_Export.txt"

Function YYYYMMDD(dtmTime)
   strMonth = Right("0" & Month(dtmTime), 2)
   strDay = Right("0" & Day(dtmTime), 2)
   strYear = Right(Year(dtmTime), 4)
   YYYYMMDD = strYear & strMonth & strDay
End Function

Open in new window


~bp
0
 
JHopkins213Author Commented:
Here is what I ended up doing

stavros41's code was exactly what I needed
strScript = "runftp.txt"
strSite = "ftp.site.com"
strUsername = "password"
strPassword = "GBRTA2sys" 
strFileName = "*.txt"
strDirectory = "c:\RTA_FILES"
strPrefix = "ExportTemplate_0"
strLastFileName = strPrefix & "_" & YYYYMMDD(Date) & "0000" 

Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objShell: Set objShell=CreateObject("Wscript.Shell")

If objFSO.FolderExists(strDirectory) Then
	objFSO.DeleteFolder(strDirectory)
	objFSO.CreateFolder(strDirectory)
Else
   objFSO.CreateFolder(strDirectory)
End If


Set objScript = objFSO.CreateTextFile(strDirectory & "\" & strScript, True)
objScript.WriteLine "open " & strSite
objScript.WriteLine strUsername
objScript.WriteLine strPassword
objScript.WriteLine "lcd " & strDirectory
objScript.WriteLine "mget " & Chr(34) & strFileName & Chr(34)
objScript.WriteLine "bye "
objScript.Close
 
Set objShell = CreateObject("WScript.Shell")
strCommand = "cmd /c ftp -i -s:" & Chr(34) & strScript & Chr(34) 
objShell.Run strCommand, 0, True
objFSO.DeleteFile(strDirectory & "\" & strScript), True


Set objFolder = objFSO.GetFolder(strDirectory & "\")
For Each item In objFolder.Files
  If InStr(item.Name, strLastFileName) <> 0 Then 
  	 strNewName = "LAST_EXPORT.txt"
	 item.Name = strNewName	 
  End If    
Next 


 Function YYYYMMDD(dtmTime)
    strMonth = Right("0" & Month(dtmTime), 2)
    strDay = Right("0" & Day(dtmTime), 2)
    strYear = Right(Year(dtmTime), 4)
    
    YYYYMMDD = strYear & strMonth & strDay
End Function

Open in new window

0
 
Bill PrewCommented:
==> Here is what I ended up doing

Hmm, just be careful of that, I don't think there is any guarantee that the For Each loop returns files sorted by name.  I suspect it just pulls them by the order they are in the directory, which could be random.

~bp
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now