2017-02-19 26 views
0

我想写PowerShell脚本将在哪里应用存在,并且需要将文件夹&文件复制到backupfolder在部署之前相同的路径创建backupfolder同一目录中。下面是该命令使用来执行,但我收到错误复制文件上使用PowerShell

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

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

Error: Cannot copy item C:\XYZ\Backup_18-02-2017 on to itself

+0

我假设你已经试过管理权 – William

+1

'$ source_'是一个有效的标识符名称。使用'$($ source)_'或''''source'_''' – wOxxOm

+0

William - 我没有得到您的问题,如果您询问有管理员权限的运行Powershell,那么是运行脚本的帐户有admin previliges – ATLANTAFALCONS

回答

0

尝试:

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

这将消除您复制为正在复制源文件夹从。

+0

基思,我仍然得到相同的错误 – ATLANTAFALCONS

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 
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 
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 
+0

谢谢扎克,它为我工作。 – ATLANTAFALCONS

+0

很高兴工作。如果你想接受它作为一个很酷的答案。 –