Solved

copy file and delete file by vbscript or bat file

Posted on 2009-07-13
4
461 Views
Last Modified: 2012-05-07
Hi ,
I want a script to do
copy file a.bkf from folder a to folder b and rename file a to a_yyyymmdd.bkf
detect the files in folder b and delete the file that old than 30days.

Please write it as a vbscript or dos bat file . so it is easy to modify.
0
Comment
Question by:GordonLiq
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 19

Expert Comment

by:Rob Hutchinson
ID: 24846496
This is part of a vbs subroutine that I wrote 10 years ago and I can't even remember where I got the info from, etc.

Don't ask me to explain it as I'm not a scripting expert, but thought I'd post it anyway to give you some ideas so you can write your own script.

It does not do the detecting part of it.

I included the exe, but renamed it as RF.txt.

if there is a file in the same folder called "access_file" then it renames it to
"1023-PM-07-13-09-access_file" or whatever the current date and time are.

Attribute VB_Name = "FileScan"
Public Sub Main()
 
Dim OldName, Today, filenamedatentime
Today = Now ' Assign current system date and time.
Today = Format(Today, "hmm-AM/PM-mm-dd-yy")
 
'Rename the access_file name to today's date
OldName = "access_file"
filenamedatentime = CStr(Today + "-" + OldName)
Name OldName As filenamedatentime ' Move and rename file.
 
errorfile
 
End Sub
 
Public Sub errorfile()
 
Dim OldName, Today, filenamedatentime
Today = Now ' Assign current system date and time.
Today = Format(Today, "hmm-AM/PM-mm-dd-yy")
 
On Error Resume Next
'Rename the error_file name to today's date
OldName = "error_file"
filenamedatentime = CStr(Today + "-" + OldName)
Name OldName As filenamedatentime ' Move and rename file.
 
End Sub

Open in new window

RF.txt
0
 
LVL 10

Expert Comment

by:Alan_White
ID: 24847421
I've got a couple of scripts I can mash together that will do what you need.  
Can you tell me, is it always the same source file?  ie always a.bkf or do you need it to cope with multiple source files?
0
 
LVL 10

Accepted Solution

by:
Alan_White earned 500 total points
ID: 24847626
OK, try this for size.
Hopefully it's clear what is happening but...
The constants up the top are the only bits you should need to change.
An exception to this is the format of the date, if you have US style dates then you need to use the US format line instead of the UK line.
Let me know how you get on.
Alan

Option Explicit
 
Const sSourceFolder = "C:\A"
Const sDestinationFolder = "C:\B"
Const cFileNameWithoutExtension = "a"
Const cFileNameExtensionOnly = ".bkf"
Const cKeepDays = 30
 
Dim oShell, oFSO, i
Dim oFolderInfo, oFileCol, oFile
Dim sLogFile, sFileName
sFileName = cFileNameWithoutExtension&cFileNameExtensionOnly
 
Set oShell = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
 
Dim sNewFileName
sNewFileName = cFileNameWithoutExtension&"_"&Year(Now)&Right("0"&Month(Now),2)&Right("0"&Day(Now),2)&cFileNameExtensionOnly
oFSO.CopyFile sSourceFolder&"\"&sFileName, sDestinationFolder&"\"&sNewFileName
clearLogs
 
Sub clearLogs
 
	Dim iStartOfDate, sCurrentFilename, fileYear, fileMonth, fileDay, fileDate, diff
	Set oFolderInfo = oFSO.GetFolder(sDestinationFolder)
	Set oFileCol = oFolderInfo.Files
	For Each oFile In oFileCol 'Loop through each file within the current sub folder
		sCurrentFilename = LCase(oFile.name)
		If InStr(sCurrentFilename, cFileNameWithoutExtension&"_") = 1 AND InStr(sCurrentFilename, cFileNameExtensionOnly) >0 Then  'if not a log file, skip
		
			iStartOfDate = InStr(sCurrentFilename, "_")+1
			fileYear =  Mid(sCurrentFilename,iStartOfDate,4)
			fileMonth = Mid(sCurrentFilename,iStartOfDate+4,2)
			fileDay =   Mid(sCurrentFilename,iStartOfDate+6,2)
			
			fileDate = CDate(fileDay&"/"&fileMonth&"/"&fileYear)  'UK format
			'fileDate = CDate(fileMonth&"/"&fileDay&"/"&fileYear)  'US format	
			
			diff = DateDiff("d",fileDate,Now)
			
			If diff => cKeepDays Then
				oFSO.DeleteFile sDestinationFolder&"\"&sCurrentFilename
			End If	
		End If 
	Next
 
End Sub

Open in new window

0
 

Author Closing Comment

by:GordonLiq
ID: 31603143
That works really well , thanks for help!!!!
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

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

Well hello again!  Glad to see you've made it this far without giving up.  In this, the fourth installment of my popular series, I'm going to cover functions and subroutines, what they are, and why they are useful.  Just in case you stumbled onto th…
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…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

734 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