import os import win32api from win32com.shell import shell, shellcon 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)