我想以递归方式复制文件夹,并在处理时排除一些文件
在我的本地计算机(使用Windows 10操作系统)我有power-shell版本
x
以下命令将Major Minor Build Revision
----- ----- ----- --------
5 1 16299 251
文件夹复制到c:\source\publish
并按预期排除文件
c:\dest
在我们的构建服务器上,我有以下powershell版本
$exclude = @('appsettings.staging.json','appsettings.production.json')
Copy-Item -Path "c:\source\publish" -Destination "c:\dest" -Exclude $exclude -recurse -Force -PassThru
当我在构建服务器上运行上述命令时,它会按预期将文件夹复制到Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
,但不会排除这些文件。
在构建服务器上,要排除我必须将c:\dest
附加到源路径的文件,如下所示
\*
上面的命令会排除这些文件,但它不会在Copy-Item -Path "c:\source\publish\*" -Destination "c:\dest" -Exclude $exclude -recurse -Force -PassThru
下创建publish
文件夹,而是直接将文件复制到c:\dest
如何复制文件夹,但也排除版本4.0的文件。-1.-1
答案 0 :(得分:1)
如果您定义不同的路径,您将获得不同的结果。指定c:\source\publish
表示要获取该文件夹c:\source\publish\*
说明在该文件夹中的所有内容,不包括文件夹本身。因此,您的目标路径需要考虑到这一点。您可以先创建路径,然后复制到路径。
$exclude = @('appsettings.staging.json','appsettings.production.json')
$Dest = New-Item -Path "c:\dest\publish"-ItemType Directory -Force
Copy-Item -Path "c:\source\publish\*" -Destination $Dest.FullName -Exclude $exclude -recurse -Force -PassThru
答案 1 :(得分:1)
您可以根据正在使用的PowerShell版本构建逻辑。
$exclude = @('appsettings.staging.json','appsettings.production.json')
$source = "c:\source\publish"
$dest = "c:\dest"
if($PSVersionTable.PSVersion.Major -eq 4){
$dest = $dest + "\" + (Split-Path $source -leaf)
$source = $source + '\*'
New-Item -Path $dest -ItemType Directory -Force
}
Copy-Item -Path $source -Destination $dest -Exclude $exclude -recurse -Force -PassThru
答案 2 :(得分:0)
其他方法,更多的interressant,因为你可以修改where条件更具体:
$exclude = @('appsettings.staging.json','appsettings.production.json')
$Dest = New-Item -Path "c:\dest"-ItemType Directory -Force
Get-ChildItem "c:\source\publish" -file -Recurse | where name -notin $exclude | Copy-Item -Destination $Dest.FullName -Force