如何基于带有部分文件名的文本文件搜索目录和子目录并将这些文件复制到新目录

时间:2019-03-29 14:05:19

标签: powershell command-prompt

我正在尝试在目录和子目录中搜索文本文件中列出的文件,并使用批处理文件将它们复制到新位置。如果将所需文件放在主目录中,则可以正常工作,但无法搜索子目录。

@echo off
for /f "tokens=1,* delims=," %%j in (filelist.txt) do (
 for /r "E:\Source"  %%a in ("%%j") do (
    copy "%%a" "C:\Destination\%%k"
 )
)

如果我只想搜索“源”文件夹,但不能搜索“源”文件夹内的任何文件夹,则此方法有效。希望有人可以告诉我我所缺少的。

我对此并不陌生,所以请告诉我是否需要更多信息。

1 个答案:

答案 0 :(得分:0)

这应该让您入门,如果您选择使用Powershell。

$files = 'C:\list.txt'
$location = 'C:\files\'
$destination = 'C:\destination\'

# for each filename in "list.txt", look for the file in C:\destination\, recursively
gc $files | % {
    write-host "looking for $_"

    $result = gci -Recurse $location $_

    if($result) {
        write-host -ForegroundColor Green "found $_ in $location!"
        write-host "copying $_ to $destination..."
        copy-item $result.FullName $destination\$_
    }
}

输出将如下所示:

enter image description here

-Recurse标志可帮助您遍历子目录的问题。

您可能需要优化此方法,以消除每个文件名运行一次搜索的麻烦,尽管这样做规模很小,但是效果很好。