Solved

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

Posted on 2009-05-05
2
446 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

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

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
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…

708 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

18 Experts available now in Live!

Get 1:1 Help Now