使用Powershell在同一目录上复制文件

时间:2017-02-19 00:11:11

标签: powershell

我正在尝试编写powershell脚本,它将在存在应用程序的同一路径上创建备份文件夹,并且需要复制文件夹和文件夹。在部署之前将文件放入backupfolder。下面是命令用来执行但是收到错误

$Source = "C:\XYZ"
$BackupFolder = New-Item -ItemType Directory -Force -Path $source_$(Get-Date) 

Copy-Item -Path $Source\* $BackupFolder -Force
  

错误:无法将项目C:\ XYZ \ Backup_18-02-2017复制到自身

4 个答案:

答案 0 :(得分:0)

尝试:

Copy-Item $Source\* $BackupFolder -Exclude $BackupFolder

这将消除您将复制到中的文件夹作为正在复制的来源。

答案 1 :(得分:0)

变量可以包含下划线。以下工作并显示字符串" asdf"

$a_ = "adsf"; $a_

您的New-Item cmdlet调用应该失败,因为$source_不是变量并且将返回null。这是PowerShell的默认行为。当我按原样运行你的代码时,我得到以下内容:

New-Item : Cannot find drive. A drive with the name '02/18/2017 22' does not exist.At line:1 char:1
+ New-Item -ItemType Directory -Force -Path "$source_$(Get-Date)" -what ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (02/18/2017 22:String) [New-Item], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.NewItemCommand

所以我希望你的文件夹变量为null。 wOxxOm brings this up in comment as well

解决我确定的问题的几个选项是您的问题的部分来源。

$BackupFolder = New-Item -ItemType Directory -Force -Path "$source`_$(Get-Date)" 
$BackupFolder = New-Item -ItemType Directory -Force -Path "$($source)_$(Get-Date)" 
$BackupFolder = New-Item -ItemType Directory -Force -Path ("{0}_{1} -f "$source, Get-Date) 

您仍然需要尝试从副本中排除此文件夹,例如Keith Hill's answer is telling you

Copy-Item $Source\* $BackupFolder -Exclude $BackupFolder

答案 2 :(得分:0)

尝试类似这样的事情

 $Source = "C:\XYZ"
 $Destination="{0}{1:yyyyMMdd}" -f $source, (Get-Date)
 New-Item -ItemType Directory -Force -Path $Destination

 Copy-Item -Path $Source\* $Destination -Recurse -Force

答案 3 :(得分:0)

如果我正确理解了这个问题。您希望将"C:\XYZ"和备份带到名为"C:\XYZ\backup_$DATE"的同一目录中。你实际要做的是创建一个循环,一旦达到最多248个字符就会中断。如果我们使用-exclude选项,那么我们可以排除备份目录"C:\XYZ\backup_$DATE"

这个功能可以解决这个问题,也可以帮助你处理错误。

Function Get-CopyDirectory{
#####################
# Dynamic Variables #
#####################

$Date = Get-Date -format ddMM-yyyy
$Exclude="Backup*"

####################
# Static Variables #
####################
$AppPath = "F:\Test\"
$BackupPath = "$AppPath\BACKUP_$Date\"

if (Test-Path $BackupPath) {
Write-Host "Backup Exist" -f Cyan
}
else 
{
Copy-Item "$AppPath\*" $BackupPath -Exclude $Exclude -recurse -verbose
}
}
CLS
Get-CopyDirectory