PowerShell - 从特定文件夹复制特定文件

时间:2015-03-17 13:27:01

标签: powershell powershell-ise

因此,文件夹结构如下所示:

  1. SourceFolder
    • FILE1.TXT
    • 的File1.doc
      1. Subfolder1
        • FILE2.TXT
        • file2.doc
          1. SubSubFolder
            • file3.txt
            • doc3.txt
  2. 我想要做的是将文件夹中的所有.txt文件(其(文件夹)名称包含 eng )复制到目标文件夹。只是文件夹中的所有文件 - 而不是文件结构。

    我使用的是:

    $dest = "C:\Users\username\Desktop\Final"
    $source = "C:\Users\username\Desktop\Test1"
    Copy-Item $source\eng*\*.txt $dest -Recurse
    

    问题是它只复制每个父文件夹的.txt文件,而不复制子文件夹。

    如何在此脚本中包含所有子文件夹并同时保持 eng 名称检查?你能帮我吗?

    我说的是PowerShell命令。我应该使用robocopy吗?

5 个答案:

答案 0 :(得分:8)

另一种PowerShell解决方案:)

# Setup variables
$Dst = 'C:\Users\username\Desktop\Final'
$Src = 'C:\Users\username\Desktop\Test1'
$FolderName = 'eng*'
$FileType = '*.txt'

# Get list of 'eng*' file objects
Get-ChildItem -Path $Src -Filter $FolderName -Recurse -Force |
    # Those 'eng*' file objects should be folders
    Where-Object {$_.PSIsContainer} |
        # For each 'eng*' folder
        ForEach-Object {
        # Copy all '*.txt' files in it to the destination folder
            Copy-Item -Path (Join-Path -Path $_.FullName -ChildPath '\*') -Filter $FileType -Destination $Dst -Force
        }

答案 1 :(得分:1)

你可以这样做:

$dest = "C:\NewFolder"
$source = "C:\TestFolder"
$files = Get-ChildItem $source -File -include "*.txt" -Recurse | Where-Object { $_.DirectoryName -like "*eng*" }
Copy-Item -Path $files -Destination $dest

答案 2 :(得分:1)

另一种观点:

$SourceRoot = <Source folder path>
$TargetFolder = <Target folder path>


@(Get-ChildItem $SourceRoot -Recurse -File -Filter *.txt| Select -ExpandProperty Fullname) -like '*\eng*\*' |
foreach {Copy-Item $_ -Destination $TargetFolder}

答案 3 :(得分:0)

使用PowerShell做到这一点很好。尝试:

$dest = "C:\Users\username\Desktop\Final"
$source = "C:\Users\username\Desktop\Test1"

Get-ChildItem $source -filter "*.txt" -Recurse | Where-Object { $_.DirectoryName -match "eng"} | ForEach-Object { Copy-Item $_.fullname $dest }

答案 4 :(得分:0)

首先获取名称中包含eng的所有文件夹的列表可能更容易。

$dest = "C:\Users\username\Desktop\Final"
$source = "C:\Users\username\Desktop\Test1"

$engFolders = Get-ChildItem $source -Directory -Recurse | Where { $_.BaseName -match "^eng" }
Foreach ($folder In $engFolders) {
    Copy-Item ($folder.FullName + "\*.txt") $dest
}