2017-02-19 48 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

很高興工作。如果你想接受它作爲一個很酷的答案。 –