7

У меня есть скрипт powershell, который копирует файлы из $source в $dest и исключает некоторые типы файлов. Это исключает мои csv-файлы и файлы web.config, но не исключает содержимое папки Log. Это мой сценарий, какой правильный синтаксис для исключения содержимого файлов, но не самой папки Log ?

$exclude = @('Thumbs.db','*-Log.csv','web.config','Logs/*')

Get-ChildItem $source -Recurse -Exclude $exclude | Copy-Item -Destination {Join-Path $dest $_.FullName.Substring($source.length)}

2 ответа2

4

Вам нужно настроить второй массив с путями, которые вы хотите избежать, а затем добавить фильтр в трубу. Вот пример кода:

$exclude = @('Thumbs.db','*-Log.csv','web.config','Logs/*')
$directory = @("C:\logs")
Get-ChildItem $source -Recurse -Exclude $exclude | where {$directory -notcontains $_.DirectoryName}
0

Вы можете сделать свою собственную функцию рекурсивного копирования.

function Copy-WithFilter ($sourcePath, $destPath)
{
    $exclude = @('Thumbs.db', '*-Log.csv','web.config', 'Logs')

    # Call this function again, using the child folders of the current source folder.
    Get-ChildItem $sourcePath -Exclude $exclude | Where-Object { $_.Length -eq $null } | % { Copy-WithFilter $_.FullName (Join-Path -Path $destPath -ChildPath $_.Name) } 

    # Create the destination directory, if it does not already exist.
    if (!(Test-Path $destPath)) { New-Item -Path $destPath -ItemType Directory | Out-Null }

    # Copy the child files from source to destination.
    Get-ChildItem $sourcePath -Exclude $exclude | Where-Object { $_.Length -ne $null } | Copy-Item -Destination $destPath

}

# $source and $dest defined elsewhere.
Copy-WithFilter $source $dest

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .