Powershell Copy-Item 即使文件夹存在也不复制

Powershell Copy-Item not copying even when folder exists

我连续两次调用 Copy-Item,但第二次没有复制文件。两者都将同一个文件复制到两个不同的文件夹。两个文件夹都存在。但是第二个从不复制。我试着注释掉第一个,但第二个仍然没有复制。

$deliveryFolder = "C:\Users\administrator.GTCS\Desktop\Delivery.5.6.1140\"    
$localFolder = "C:\WebServerGateway\"    
$fileSharingServerManifestFileName = "GTCS_GCS_FileSharingServer_Manifest.xml"

Copy-item -Path $localFolder$fileSharingServerManifestFileName -Destination $deliveryFolder"GcsData\Configurations\Platforms\DEV\Web Server Gateway" -Force

Copy-item -Path $localFolder$fileSharingServerManifestFileName -Destination $deliveryFolder"GcsData\Configurations\Platforms\INT\Web Server Gateway" -Force

如果您要以这种方式组合字符串,您需要将它们用双引号括起来,以扩展变量:

$deliveryFolder = "C:\Users\administrator.GTCS\Desktop\Delivery.5.6.1140\"    
$localFolder = "C:\WebServerGateway\"    
$fileSharingServerManifestFileName = "GTCS_GCS_FileSharingServer_Manifest.xml"

    Copy-item -Path "$localFolder$fileSharingServerManifestFileName" -Destination "$($deliveryFolder)GcsData\Configurations\Platforms\DEV\Web Server Gateway" -Force
    
    Copy-item -Path "$localFolder$fileSharingServerManifestFileName" -Destination "$($deliveryFolder)GcsData\Configurations\Platforms\INT\Web Server Gateway" -Force

注意我在 -Destination 参数中使用了子表达式 $()。因为在您的情况下,解析器可能无法确定变量名的结束位置,因此字符串可能无法正确扩展。

就是说,这两个参数都不是特别 pretty/readable 所以我建议不要使用这种语法。连接或更好地使用 Join-Path 来导出参数是更好的选择:

$Path = $localFolder + $fileSharingServerManifestFileName
$Dest = $deliveryFolder + "GcsData\Configurations\Platforms\INT\Web Server Gateway"

注意:连接会迫使您注意分隔 -Parent/-Child 参数的反斜杠 Join-Path

或者:

$Path = Join-Path $localFolder $fileSharingServerManifestFileName
$Dest = Join-Path $deliveryFolder "GcsData\Configurations\Platforms\INT\Web Server Gateway"

然后简单修改命令:

Copy-item -Path $Path -Destination $Dest -Force
Copy-item -Path $Path -Destination $Dest -Force