' Zero out free space on a hard drive
' Aaron Ward
' Slowfuse.com

'set defaults
myFilename = "Delete.me"          
myMaxFileSize = 3000000000     ' about 3 gig.
myWriteSize = 32768            ' this is arbitrarily set for speed
myString = chr(0)              ' this should be one byte


set myArgs = wscript.Arguments
set myFs = CreateObject("Scripting.FilesystemObject")

If myArgs.Count > 0 Then
	myDriveLetter = left(myFs.GetAbsolutePathName(myArgs(0)),1)
Else
	myDriveLetter = "c"
End If

If myfs.FolderExists(myDriveLetter & ":\") Then
else 
	wscript.echo "Drive " & myDriveLetter & ": is not a good choice." & vbcrlf
	wscript.quit
end if

wscript.echo "Using drive " & myDriveLetter & ":\" & vbcrlf

Set mydrive = myfs.GetDrive(myfs.GetDriveName(myDriveLetter & ":\")) ' seems odd, but now I have an object.

if mydrive.freespace = 0 then 
	wscript.echo myDriveLetter & " has no free space."
end if


for mem = 0 to myWriteSize 
	mychunk = mychunk & myString
next

WriteStuff myDrive.Freespace, myfs, 0
'wscript.echo mydrive.freespace & "  : " & myMaxFileSize & vbcrlf

sub WriteStuff(myFreeSpace, myfs, i)
	myfn = mydriveletter & ":\" & myFilename & i                     ' create unique filename
	if myFreeSpace < myMaxFileSize then                              ' check for max size
		mylimit = 0                                              ' write until zero free space
	else 
		mylimit = myFreeSpace - myMaxFileSize                    ' only write maxFileSize
	end if

	if mylimit <>0 and i<>0   then ' lots to write and we already have a large file.  
		mylastfilename = mydriveletter & ":\" & myFilename & (i-1)
		myfs.CopyFile mylastfilename,myfn,true
	else
		
		set mytmpfile = myfs.CreateTextFile(myfn,false,false)

		do while myDrive.Freespace > myLimit                             ' write in chuncks of myWriteSize
			if myDrive.Freespace - myLimit >  myWriteSize then 
				mytmpfile.write mychunk
			else
				mytmpfile.write myString	 
			end if	
	
		loop
		mytmpfile.close
	end if

	if mylimit > 0 then 
	WriteStuff myDrive.Freespace,myfs, i+1
	end if
	myfs.deletefile myfn 
end sub
