Welcome, guest | Sign In | My Account | Store | Cart

CdCopy: Windows utility for copying contents of a CD/DVD to local hard disk with most free space to a directory named for full name of CD/DVD.

Python, 110 lines
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
"""
CdCopy: Windows utility for copying contents of a CD/DVD to local hard disk with
most free space to a directory named for full name of CD/DVD.

It would be convenient to drag and drop a CD/DVD icon onto a local hard drive and 
have the Windows GUI create a directory of the same full name as the CD/DVD
then copy CD/DVD contents to that directory. 

Unfortunately Windows does not allow this. 

This small stand-alone utility will extract the name of the CD/DVD, determine
the local hard disk with the most available space, create a directory using the
name of the CD/DVD, then write the CD/DVD contents to that directory.

Usage:

* Copy CdCopy.py to any location on your computer.
* Check that global CD_PATH has the correct drive letter for your system 
  or specify CD/DVD path in the command line.
* Insert CD/DVD that you wish to copy.
* Double-click on CdCopy.py
- Console window will provide feedback on copying progress.
- On completion, press RETURN to exit utility.

Notes:

* Windows only.
* CdCopy does not check that there is enough room on destination to copy CD/DVD.
* CdCopy will also work using the command line:

    CdCopy
    CdCopy [CD/DVD drive path]

"""
__author__=["Jack Trainor (jacktrainor@gmail.com)",]
__version__="2010-03-16"
try:
    import sys
    import os, os.path
    import win32api
    import win32file
    
    CD_PATH = "D:\\" # change as appropriate or pass in by command line arg
    
    def mkdir_path(path):
        if not os.access(path, os.F_OK):
            os.makedirs(path)
            
    def get_volume_paths():
        paths = []
        try:
            drives = win32api.GetLogicalDriveStrings()
            paths = drives.split("\0")
            paths = paths[0:-1] # cut off null string at end
        except Exception, e:
            print "get_volume_paths failed: %s\n" % e
        return paths
    
    def get_free_space(disk):
        free_space = 0
        try:
            free_space_tuple = win32file.GetDiskFreeSpaceEx(disk)
            free_space = free_space_tuple[0]
        except Exception, e:
            pass # ignores failures for inappropriate disks
        return free_space
    
    def get_volume_name(volume_path):
        volume_name = volume_path[0]
        try:
            volume_name = win32api.GetVolumeInformation(volume_path)[0]
        except Exception, e:
            print "get_volume_name failed: %s\n" % e
        return volume_name
    
    def get_volume_with_most_space():
        volume = ""
        free = 0
        volume_paths = get_volume_paths()
        decorated_list = [(get_free_space(path), path) for path in volume_paths]
        if decorated_list:
            decorated_list.sort()
            decorated_list.reverse()
            free, volume = decorated_list[0]
        return volume, free
    
    def copy_cd(cd_path):
        try:
            dest_vol, free_space = get_volume_with_most_space()
            cd_name = get_volume_name(cd_path)
            dest_dir = os.path.join(dest_vol, cd_name) 
            mkdir_path(dest_dir)
            command = "XCOPY %s* \"%s\" /s /i" % (cd_path, dest_dir)
            print command
            os.system(command)
        except Exception, e:
            print "copy_cd failed: %s\n" % e
    
    if __name__ == '__main__':
        print "CdCopy start..."
        if len(sys.argv) > 1:
            cd_path = sys.argv[1]
        else:
            cd_path = CD_PATH
        copy_cd(cd_path)
        print "CdCopy finished."

except Exception, e:
    print "CdCopy failed ... %s" % e
raw_input("Press RETURN...")

It would be convenient to drag and drop a CD/DVD icon onto a local hard drive and have the Windows GUI create a directory of the same full name as the CD/DVD then copy CD/DVD contents to that directory.

Unfortunately Windows does not allow this.

This small stand-alone utility will extract the name of the CD/DVD, determine the local hard disk with the most available space, create a directory using the name of the CD/DVD, then write the CD/DVD contents to that directory.

Usage:

  • Copy CdCopy.py to any location on your computer.
  • Check that global CD_PATH has the correct drive letter for your system or specify CD/DVD path in the command line.
  • Insert CD/DVD that you wish to copy.
  • Double-click on CdCopy.py
  • Console window will provide feedback on copying progress.
  • On completion, press RETURN to exit utility.

Notes:

  • Windows only.
  • CdCopy does not check that there is enough room on destination to copy CD/DVD.
  • CdCopy will also work using the command line:

    CdCopy CdCopy [CD/DVD drive path]