CdSlurper is used for copying files from CD/DVD to disk. It waits for a CD/DVD to be inserted, copies the files from the CD/DVD to a disk directory, ejects the CD/DVD and waits for the next CD/DVD to be inserted.
Example of how to call the script:
cscript.exe /nologo CdSlurper.vbs D C:\temp
The first argument of the script (D) is the CD/DVD drive letter. The second argument (C:\temp) is the path of the target directory. An example batch file for calling the script is included in the ZIP file.
File for download: CdSlurper.vbs.zip
' CdSlurper.vbs
'
' A script for bulk reading files from CDs/DVDs to disk.
'
' This script waits for a CD/DVD to be inserted, copies the files
' from the CD/DVD to a disk directory, ejects the CD/DVD and
' waits for the next CD/DVD to be inserted.
'
' Author: Christian d'Heureuse (www.source-code.biz)
' License: GNU/LGPL (http://www.gnu.org/licenses/lgpl.html)
' Version: 2009-01-20
Option Explicit
Dim StdIn: Set StdIn = WScript.StdIn
Dim StdOut: Set StdOut = WScript.StdOut
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim sha: Set sha = CreateObject("Shell.Application")
Dim CdDriveLetter
Dim TargetDir
Dim CdDrive
Dim CdSerialNumber: CdSerialNumber = Null
Dim CdVolumeName : CdVolumeName = Null
Main
Sub Main
Init
Do
WaitForNewCd
CopyCdFiles
EjectCd
Loop
End Sub
Sub Init
GetParms
Set CdDrive = fso.GetDrive(CdDriveLetter)
If CdDrive.DriveType <> 4 Then Err.Raise vbObjectError,, "Drive " & CdDriveLetter & ": is not a CD/DVD drive."
End Sub
Sub GetParms
If WScript.Arguments.Length <> 2 Then Err.Raise vbObjectError,, "Invalid number of command line arguments."
CdDriveLetter = WScript.Arguments(0)
If Len(CdDriveLetter) <> 1 Then Err.Raise vbObjectError,, "Invalid drive letter argument."
TargetDir = WScript.Arguments(1)
End Sub
Sub WaitForNewCd
Do
If DetectNewCd Then Exit Do
StdOut.Write "."
WScript.Sleep 1000
Loop
StdOut.WriteLine
End Sub
Function DetectNewCd
If Not CdDrive.IsReady Then Exit Function
Dim NewSerialNumber: NewSerialNumber = CdDrive.SerialNumber
Dim NewVolumeName: NewVolumeName = CdDrive.VolumeName
if NewSerialNumber = CdSerialNumber And NewVolumeName = CdVolumeName Then Exit Function
CdSerialNumber = NewSerialNumber
CdVolumeName = NewVolumeName
DetectNewCd = True
End Function
Sub CopyCdFiles
Dim CdRoot: Set CdRoot = CdDrive.RootFolder
If CdRoot.SubFolders.Count <> 0 Then _
StdOut.WriteLine "*** Warning: CD/DVD contains folders and they are ignored!": Beep
Dim Files: Set Files = CdRoot.Files
Dim File
For Each File In Files
Dim TargetFileName: TargetFileName = fso.BuildPath(TargetDir, File.Name)
If fso.FileExists(TargetFileName) Then
StdOut.WriteLine "*** Warning: File already exists in target directory: """ & File.Name & """": Beep
Else
StdOut.WriteLine File.Name
File.Copy TargetFileName
End If
Next
End Sub
Sub EjectCd
Dim ssfDrives: ssfDrives = 17
Dim Drive: Set Drive = sha.Namespace(ssfDrives).ParseName(CdDriveLetter & ":\")
Drive.InvokeVerb("E&ject")
End Sub
Sub Beep
StdOut.write chr(7)
End Sub
Author: Christian d'Heureuse (www.source-code.biz, www.inventec.ch/chdh)
Index