Solved

Rename File from FTP

Posted on 2010-11-19
6
972 Views
Last Modified: 2012-05-10
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
Comment
Question by:JHopkins213
  • 2
  • 2
  • 2
6 Comments
 
LVL 6

Expert Comment

by:stavros41
Comment Utility
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
 

Author Comment

by:JHopkins213
Comment Utility
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
 
LVL 6

Accepted Solution

by:
stavros41 earned 500 total points
Comment Utility
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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 51

Expert Comment

by:Bill Prew
Comment Utility
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
 

Author Comment

by:JHopkins213
Comment Utility
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
 
LVL 51

Expert Comment

by:Bill Prew
Comment Utility
==> 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

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

This is pretty cool.  The purpose of this VB Script is to help you document where JAR (Java ARchive) files and specifically java class files are located so that you can address issues seen with a client or that you can speak intelligently with a dev…
Over the years I have built up my own little library of code snippets that I refer to when programming or writing a script.  Many of these have come from the web or adaptations from snippets I find on the Web.  Periodically I add to them when I come…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

743 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

15 Experts available now in Live!

Get 1:1 Help Now