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
我连续两次调用 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