fromwin32com.shellimportshell,shellconimportwin32apiimportosdeftestSHFileOperation(file_cnt):temp_dir=os.environ['temp']orig_fnames=[win32api.GetTempFileName(temp_dir,'sfo')[0]forxinrange(file_cnt)]new_fnames=[os.path.join(temp_dir,'copy of '+os.path.split(orig_fnames[x])[1])forxinrange(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))forfnameinorig_fnames:assertnotos.path.isfile(fname)forfnameinnew_fnames:assertos.path.isfile(fname)shell.SHFileOperation((0,shellcon.FO_DELETE,fname,None,shellcon.FOF_NOCONFIRMATION|shellcon.FOF_NOERRORUI))deftestSHNAMEMAPPINGS(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 handletemp_dir=os.environ['temp']orig_fnames=[win32api.GetTempFileName(temp_dir,'sfo')[0]forxinrange(file_cnt)]new_fnames=[win32api.GetTempFileName(temp_dir,'sfo')[0]forxinrange(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))forold_fname,new_fnameinNameMappings:print('Old:',old_fname,'New:',new_fname)assertlen(NameMappings)==file_cnttestSHFileOperation(10)testSHFileOperation(1)testSHNAMEMAPPINGS(5)