Как я могу использовать PowerShell для копирования одного и того же файла во многие каталоги с одинаковыми именами?
Я пытаюсь скопировать один файл в любую подпапку в каталоге с конкретным именем. Я частично там, но просто не могу заставить его работать.
Я могу найти все подпапки, называемые "помощь", используя:
Get-ChildItem -Path Y:\folder1\subfolder -Directory -Recurse | ? { ($_.PSIsContainer -eq $true) -and ($_.Name -like 'help')}
Это позволит получить любую папку в подпапке Y:\folder1\ с именем help. Итак, пытались:
$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 ответа
Решение
Я написал это с версией 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
}
Версия 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 $_}