Frage

I'm trying to copy one file to any subfolder in a directory that has a specific name. I am part way there, but just can't quite get it to work.

I am able to find all of the subfolders called "help" using:

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

That will get any folder in Y:\folder1\subfolder named help. So have been trying:

$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]
}

and that does not work. Bonus points if you can also tell me how to have it write out to a csv file all of the directories it copies the file to.

Thanks

War es hilfreich?

Lösung

I wrote this with version 3, but I think it will work with 1 and 2 since I used Set-StrictMode -Version <number> to test them.

The CSV output will look something like this for every line: 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
  }

Andere Tipps

Version 1

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

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

Version 2

(gci Y:\folder1\subfolder -dir -r | ? {$_.Name -like 'help'}).fullname | % {cp Y:\Info.html $_}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top