from win32com.shell import shell, shellcon import win32api import os def testSHFileOperation(file_cnt): temp_dir=os.environ['temp'] orig_fnames=[win32api.GetTempFileName(temp_dir,'sfo')[0] for x in range(file_cnt)] new_fnames=[os.path.join(temp_dir,'copy of '+os.path.split(orig_fnames[x])[1]) for x in range(file_cnt)] pFrom='\0'.join(orig_fnames) pTo='\0'.join(new_fnames) shell.SHFileOperation((0, shellcon.FO_MOVE, pFrom, pTo, shellcon.FOF_MULTIDESTFILES|shellcon.FOF_NOCONFIRMATION)) for fname in orig_fnames: assert not os.path.isfile(fname) for fname in new_fnames: assert os.path.isfile(fname) shell.SHFileOperation((0, shellcon.FO_DELETE, fname, None, shellcon.FOF_NOCONFIRMATION|shellcon.FOF_NOERRORUI)) def testSHNAMEMAPPINGS(file_cnt): ## attemps to move a set of files to names that already exist, and generated filenames should be returned ## as a sequence of 2-tuples created from SHNAMEMAPPINGS handle temp_dir=os.environ['temp'] orig_fnames=[win32api.GetTempFileName(temp_dir,'sfo')[0] for x in range(file_cnt)] new_fnames=[win32api.GetTempFileName(temp_dir,'sfo')[0] for x in range(file_cnt)] pFrom='\0'.join(orig_fnames) pTo='\0'.join(new_fnames) rc, banyaborted, NameMappings=shell.SHFileOperation((0, shellcon.FO_MOVE, pFrom, pTo, shellcon.FOF_MULTIDESTFILES|shellcon.FOF_NOCONFIRMATION|shellcon.FOF_RENAMEONCOLLISION|shellcon.FOF_WANTMAPPINGHANDLE)) for old_fname, new_fname in NameMappings: print('Old:',old_fname, 'New:', new_fname) assert len(NameMappings)==file_cnt testSHFileOperation(10) testSHFileOperation(1) testSHNAMEMAPPINGS(5)