from concurrent.futures import ThreadPoolExecutor from pathlib import Path import subprocess def task(name): print(Path(name).name) return subprocess.Popen(f'C:\\Windows\\System32\\cmd.exe /C "{name}"', stdout=subprocess.DEVNULL).wait() def main(base_dir): files = [str(f) for f in Path(base_dir).glob('*.bat') if not f.name.startswith('_')] with ThreadPoolExecutor(max_workers=5) as executor: executor.map(task, files) if __name__ == '__main__': main('C:\\GlobalCube\\System\\CARLO\\SQL\\batch')