2

以下是我的 powershell 脚本中的确切场景。

$Source = "C:\MyTestWebsite\"
$Destination = "C:\inetpub\wwwroot\DemoSite"
$ExcludeItems = @(".config", ".csproj")

Copy-Item "$Source\*" -Destination "$Destination" -Exclude $ExcludeItems -Recurse -Force

如果目标文件夹中不存在 .config 和 .csproj 文件,我希望此代码复制它们。当前脚本只是将它们排除在外,无论它们是否存在。目标是,我不希望脚本覆盖 .config 和 .csproj 文件,但如果它们在目的地不存在,它应该复制它们。

知道脚本中需要进行哪些更正吗?

对此的任何帮助将不胜感激。

谢谢

4

4 回答 4

4

这应该非常接近您想要做的事情

$Source = "C:\MyTestWebsite\"
$Destination = "C:\inetpub\wwwroot\DemoSite"

$ExcludeItems = @()
if (Test-Path "$Destination\*.config")
{
    $ExcludeItems += "*.config"
}
if (Test-Path "$Destination\*.csproj")
{
    $ExcludeItems += "*.csproj"
}

Copy-Item "$Source\*" -Destination "$Destination" -Exclude $ExcludeItems -Recurse -Force
于 2014-11-18T08:46:59.803 回答
2
$Source = "C:\MyTestWebsite"
$Destination = "C:\inetpub\wwwroot\DemoSite"

$sourceFileList = Get-ChildItem "C:\inetpub\wwwroot\DemoSite" -Recurse

foreach ($item in $sourceFileList)
{
    $destinationPath = $item.Path.Replace($Source,$Destination)
    #For every *.csproj and *.config files, check whether the file exists in destination
    if ($item.extension -eq ".csproj" -or $item.extension -eq ".config")
    {
        if ((Test-Path $destinationPath) -ne $true)
        {
            Copy-Item $item -Destination $destinationPath -Force
        }
    }
    #If not *.csproj or *.config file then copy it directly
    else
    {
        Copy-Item $item -Destination $destinationPath -Force
    }
}
于 2014-11-18T10:31:35.877 回答
0

SKaDT 的解决方案对我有用。

Copy-Item -Path (Get-ChildItem -Path E:\source\*.iso).FullName -Destination E:\destination -Exclude (Get-ChildItem -Path E:\destination\*.iso).Name -Verbose

(Get-ChildItem -Path E:\source\*.iso).FullName将收集具有完整驱动器、路径和文件名的所有源文件。使用-Exclude参数,(Get-ChildItem -Path E:\destination\*.iso).Name收集目标文件夹中的所有 *.iso 文件并排除所有这些文件。结果:将所有 *.iso 文件从源复制到目标,但不包括目标文件夹中存在的所有 *.iso 文件。

于 2021-01-28T15:09:16.870 回答
-1

您可以使用该单行命令仅复制目标位置不存在的文件,例如任务计划程序

Copy-Item -Path (Get-ChildItem -Path E:\source\*.iso).FullName -Destination E:\destination -Exclude (Get-ChildItem -Path E:\destination\*.iso).Name -Verbose

cmdlet 通过掩码 (*.iso) 获取文件夹上的所有文件,然后查找目标文件夹并排除目标文件夹中存在的所有文件名

于 2018-08-28T15:55:22.737 回答