首页 > 解决方案 > 如何在所有子目录中查找文件并复制它?

问题描述

我需要一个批处理程序,它在运行后像这样工作:

  1. 我在批处理窗口中输入了一个数字
  2. 它会查找一个名为 like input 但扩展名为 .tif 的文件C:/Print/
  3. 如果文件不在,C:/Print/那么它应该在所有子目录中寻找这个文件,例如C:/Print/64326/BCB/1234.tif
  4. 找到文件后,应该复制到D:/HotFolder/

我设法创造了这样的东西,但首先它不能正常工作,第二件事是它不是通用的。

import os, glob, time, shutil
os.chdir("C:/Print")
print("Scan the barcode.")
while True:
    barcode = input(">").upper()
    tif = f"{barcode}.tif"
    if os.path.isfile(tif):
        shutil.copy(tif, "D:/HotFolder//")
        print(f"File copied succesfully. {tif}")
        os.chdir("C:/Print/")
    elif not os.path.isfile(barcode):
        os.chdir(f"C:/Print/{barcode}")
        if os.path.isfile(tif):
            shutil.copy(tif, "D:/HotFolder/")
            print(f"File copied succesfully. {tif}")
            os.chdir("C:/Print/")
        elif not os.path.isfile(tif):
            os.chdir(f"C:/Print/{barcode}/FCB")
            if os.path.isfile(barcode):
                shutil.copy(tif, "D:/HotFolder/")
                print(f"File copied succesfully. {tif}")
                os.chdir("C:/Print/")
            elif not os.path.isfile(tif):
                os.chdir(f"C:/Print/{barcode}/FCS")
                if os.path.isfile(barcode):
                    shutil.copy(tif, "D:/HotFolder/")
                    print(f"File copied succesfully. {tif}")
                    os.chdir("C:/Print/")
                elif not os.path.isfile(tif):
                    os.chdir(f"C:/Print/{barcode}/BCB")
                    if os.path.isfile(barcode):
                        shutil.copy(tif, "D:/HotFolder/")
                        print(f"File copied succesfully. {tif}")
                        os.chdir("C:/Print/")
                    elif not os.path.isfile(tif):
                        os.chdir(f"C:/Print/{barcode}/BCS")
                        if os.path.isfile(barcode):
                            shutil.copy(tif, "D:/HotFolder/")
                            print(f"File copied succesfully. {tif}")
                            os.chdir("C:/Print/")
    else:
        print("Error.")

标签: pythonloopscopysubdirectory

解决方案


这是一个小片段:

from pathlib import Path
from shutil import copyfile

input_dir = "C:/Print/"
output_dir = "D:/HotFolder/"

barcode = "1234"

for filename in Path(input_dir).rglob("*.tif"):
    if filename.name == barcode + ".tif":
        copyfile(filename, Path(output_dir, filename.name))
        break
else:
    print("Not found")

推荐阅读