如何使用PowerShell将同一文件复制到具有相同名称的多个目录?

时间:2014-02-03 22:03:26

标签: windows powershell get-childitem

我正在尝试将一个文件复制到具有特定名称的目录中的任何子文件夹。我在那里的一部分,但只是不能让它工作。

我可以使用以下方法找到所有名为“help”的子文件夹:

Get-ChildItem -Path Y:\folder1\subfolder -Directory -Recurse | ? { ($_.PSIsContainer -eq $true) -and ($_.Name -like 'help')}

这将获得名为help的Y:\ folder1 \ subfolder中的任何文件夹。所以一直在尝试:

$folder = Get-ChildItem -Path Y:Y:\folder1\subfolder -Directory -Recurse | ? { ($_.PSIsContainer -eq $true) -and ($_.Name -like 'help')}

foreach ($f in $folder){
Copy-Item Y:\Info.html -Destination $folder[$f]
}

这不起作用。如果您还可以告诉我如何将其复制到文件的所有目录中写入csv文件,则可以获得奖励积分。

由于

2 个答案:

答案 0 :(得分:1)

版本1

$folders = @(
    (gci Y:\folder1\subfolder -dir -r | ? {$_.Name -like 'help'}).fullname
)

ForEach ($f in $folders) {
    Copy-Item Y:\Info.html $f
}

版本2

(gci Y:\folder1\subfolder -dir -r | ? {$_.Name -like 'help'}).fullname | % {cp Y:\Info.html $_}

答案 1 :(得分:1)

我用版本3编写了这个,但我认为它可以用1和2,因为我使用Set-StrictMode -Version <number>来测试它们。

对于每一行,CSV输出看起来都是这样的:Y:\Info.html,Y:\folder1\subfolder\help

$logpath = 'C:\log.csv'
$logopts = @{filepath=$logpath; append=$true; encoding='ascii'}

$file = 'Y:\Info.html'
$path = 'Y:\folder1\subfolder'
$search = 'help'

gci $path -d -s `
  | ?{ $_.psIsContainer -and $_.name -match $search } `
  | %{
    cp $file $_.fullName;                 # copy file
    $line = $file, $_.fullName -join ','; # build output
    $line | out-file @logopts;            # write output
  }