首页 > 解决方案 > 使用 PowerShell 根据名称将文件列表复制到文件夹

问题描述

给定一个dir1包含 pdf 文件列表的目录dir2和一个包含文件夹列表的目录,我想通过以下原则将文件复制到文件夹中:只要文件名包含文件夹名,文件就会复制到该文件夹​​中。这是我尝试过的,但它不起作用。我相信原因是我将文件夹视为文件,但我不确定..

Set-ExecutionPolicy Unrestricted

$FileType = "*.pdf"
$filelist = Get-ChildItem -path "[dir1]" -Filter $FileType
$folderlist = Get-ChildItem -path "[dir2]"


ForEach($file in $filelist)
{
    $file
    $key1 = $file.BaseName
    $key1
    ForEach($folder in $folderlist)
    {
        $folder 
        $key2 = $folder.BaseName
        $key2
        if ($key1 -like $key2){
            Copy-Item -Path $file.FullName -Destination $folder.FullName
        }
    }

}

标签: powershell

解决方案


-like运算符使用通配符,并将执行全长比较:

"a" -like "a" # true
"ab" -like "a" # false

因此,如果要测试一个值是否包含另一个值,则必须在通配符字符串的开头和结尾加上星号:

if ($key1 -like "*$key2*")

推荐阅读