Powershell排除版本4的问题

时间:2018-03-29 21:46:35

标签: powershell powershell-v4.0

我想以递归方式复制文件夹,并在处理时排除一些文件

在我的本地计算机(使用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

3 个答案:

答案 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