Solved

copy file and delete file by vbscript or bat file

Posted on 2009-07-13
4
462 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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Welcome, welcome!  If you are new to the series and haven't been following along, please take a brief moment to review the first three installments: Part 1 (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/A_266-VBScri…
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…
In this video, viewers are given an introduction to using the Windows 10 Snipping Tool, how to quickly locate it when it's needed and also how make it always available with a single click of a mouse button, by pinning it to the Desktop Task Bar. Int…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…

728 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