Solved

file/folder delete question, with a space in the folder name

Posted on 2009-05-05
2
448 Views
Last Modified: 2012-05-06
Hi I run this code to delete files and folders, it works ok with I type in cmd:
cscript DeleteFiles.vbs d:\logfiles 31 /R,

but when i type a folder with space in the name such as 'log files' or 'tom new house'
cscript DeleteFiles.vbs d:\log files 31 /R

it gave me 'Age parameter must be numeric' warning.

i think the space in the folder name caused the problem, but I can not change the folder name.
does anyone know how to modify the code?
thanks a lot!!

Robin
'************************************************************************
'*
'*	This script will loop over all files in the specified folder 
'*	and will delete any old than the specified age
'*	Care must be taken with this script as it will delete files 
'*	without prompts. 
'*
'*	Usage: 
'*	DeleteFiles.vbs [path] [age] [/R] 
'*	[Path] Specifies the path to process
'*	[Age] Specified the age of files in day which will be deleted
'*
'*	/R	Deletes files recursively. All Files under the specified folder older than specified age will be deleted. 
'*
'* 	WARNING: THIS WILL DELETE FILES WITHOUT ANY PROMPTS. DO NOT RUN THIS ON CRITICAL SYSTEM FOLDERS
'*	Example: cscript DeleteFiles.vbs d:\logfiles 31 /R
'*
'************************************************************************
 
 
 
 
dim filecnt 
dim age
dim recursive
dim path 
filecnt = 0 
if WScript.Arguments.Count <2 then 
	WScript.Echo "Usage: "
	WScript.Echo "DeleteFiles.vbs [Path] [Age] [/R]" & vbcrlf 
	Wscript.Echo "[Path] Specifies the path to process"
	Wscript.Echo "[Age] Specified the age of files in day which will be deleted" & vbcrlf 
	wScript.Echo "/R	Deletes files recursively. All Files under the specified folder older than specified age will be deleted. " & vbcrlf 
	Wscript.Echo "Example: cscript DeleteFiles.vbs d:\logfiles 31 /R" & vbcrlf 
	wscript.Echo "WARNING: THIS WILL DELETE FILES WITHOUT ANY PROMPTS. DO NOT RUN THIS ON CRITICAL SYSTEM FOLDERS"
	wscript.Echo ""
	wscript.quit(0)
else 
 
	if NOT isNumeric(wscript.arguments(1)) then 
		wScript.Echo "Age parameter must be numeric"
		wscript.quit(0)
	else 
		path = wscript.arguments(0)
		'validate path parameter ? 
		age = cint(wscript.arguments(1))
		if wscript.arguments.count = 3 then 
			if lcase(wscript.arguments(2)) = "/r" then 
				recursive = "/r"
				wscript.echo "Recursive Mode"
			end if 
		end if 
		recursefiles path
	end if 
end if 
 
 
wscript.echo filecnt  & " files were processed."
 
 
Sub RecurseFiles(Path)
	Const FOR_READING = 1
	strFolder = path
	Set objFSO = CreateObject("Scripting.FileSystemObject")
	Set objFolder = objFSO.GetFolder(strFolder)
	wscript.echo objFolder.Path
	Set colFiles = objFolder.Files
	For Each objFile In colFiles
		ProcessFile (objFile)
	Next
	if recursive= "/r" then 
		ShowSubFolders (objFolder)
	end if 
End Sub
 
Sub ProcessFile(file)
FileAge1 = DateDiff("d",file.DateLastModified, now )
FileAge2 = DateDiff("d",file.DateCreated, now )
FileAge3 = DateDiff("d",file.DateLastAccessed, now )
if FileAge1  > Age and FileAge2 > age and FileAge3 > age then 
      on error resume next 
      filecnt = filecnt + 1
      wscript.echo "deleting " & file.Path & " " & file.datelastmodified 
      file.delete true 'true will force the deletion 
      on error goto 0 
end if 
End Sub
 
 
Sub ShowSubFolders(objFolder)
  Set colFolders = objFolder.SubFolders
  For Each objSubFolder In colFolders
    wscript.echo objSubFolder.Path
    Set colFiles = objSubFolder.Files
    For Each objFile In colFiles
      ProcessFile (objFile)
    Next
    ShowSubFolders (objSubFolder)
  If objSubFolder.Files.Count = 0 And objSubFolder.SubFolders.Count = 0 Then
    'the level above this is empty
      on error resume next 
      wscript.echo "deleting " & objSubFolder
        objSubFolder.Delete true 
      on error goto 0 
    End If
  Next
End Sub

Open in new window

0
Comment
Question by:robinyanwang
2 Comments
 
LVL 10

Accepted Solution

by:
TakedaT earned 250 total points
ID: 24309002
Try to enclose the path in " " like so.

cscript DeleteFiles.vbs "d:\log files" 31 /R
0
 

Author Closing Comment

by:robinyanwang
ID: 31578216
thanks.
0

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Only allow one site in Internet Explorer on XenApp. 9 63
Visual Studio 2005 text editor 10 38
clicking a shape in a frame array vb6 3 45
ASP CDO - Limiting Connections 2 50
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…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

776 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