复制项目和排除文件夹

时间:2015-08-19 14:22:52

标签: powershell

我需要将所有c:\inetpub目录复制到新位置,但不包括以下文件夹及其子文件夹:

c:\inetpub\custerr
c:\inetpub\history
c:\inetpub\logs
c:\inetpub\temp
c:\inetpub\wwwroot

到目前为止,我正在这样做:

# Directory name is created with a format string
$dirName = "\\servername\folder1 _ {0}\inetpub" -f (get-date).ToString("yyyy-MM-dd-hh-mm-ss")
$dirName # Check the output

# Create dir if needed
if(-not (test-path $dirName)) {
    md $dirName | out-null
} else {
    write-host "$dirName already exists!"
}

#Copy Backup File to Dir
Copy-Item "\\servername\c$\inetpub\*" $dirName -recurse

4 个答案:

答案 0 :(得分:6)

这是您可以做的一个简单示例。构建要排除的父文件夹的数组。由于您是通过UNC路径访问它们,我们无法真正使用c:\​​路径(我们可以解决这个问题,但我要展示的内容应该足够好了。)。

然后使用Get-ChildItem获取inetpub目录中的所有文件夹。使用-notin过滤掉排除对象,然后将其余内容传递给Copy-Item

$excludes = "custerr","history","logs","temp","wwwroot"
Get-ChildItem "c:\temp\test" -Directory | 
    Where-Object{$_.Name -notin $excludes} | 
    Copy-Item -Destination $dirName -Recurse -Force

至少需要PowerShell 3.0才能实现。

答案 1 :(得分:1)

Copy-Item -Path (Get-Item -Path "$path\*" -Exclude ('Folder1', 'File.cmd', 'File.exe', 'Folder2')).FullName -Destination $destination -Recurse -Force

替换:

$path通过您的源文件夹

('Folder1', 'File.cmd', 'File.exe', 'Folder2')按您的特定文件/文件夹排除

$destination通过您的目标文件夹

答案 2 :(得分:1)

哦,答案很简单,但我们似乎都是 PowerShell 菜鸟。

New-Item -ItemType Directory -Force -Path $outDir # directory must exist
Copy-Item $inDir\* $outDir -Exclude @("node_modules",".yarn") -Recurse

\* 让它发挥作用。

PowerShell 很棒,但是...

答案 3 :(得分:0)

您可以采取以下措施:

  ?{$_.fullname -notmatch '\\old\\'}

抓住所有文件夹后将其过滤掉。

此示例将排除名称中包含“old”的任何内容。您可以对要排除的目录执行此操作。

一个完整的例子:

C:\Example*" -include "*.txt -Recurse |
  ?{$_.fullname -notmatch '\\old\\'}|
    % {Copy-Item $_.fullname "C:\Destination\"}

对于多项排除,您可以使用-And

C:\Example*" -include "*.txt -Recurse |
  ?{$_.fullname -notmatch '\\old\\' -And $_.fullname -notmatch '\\old2\\'}|
    % {Copy-Item $_.fullname "C:\Destination\"}