我需要将所有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
答案 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\"}