2016-06-28 86 views
0

我有一个powershell脚本,将文件夹复制到新目录,然后根据当前日期重命名该新目录。复印功能的伟大工程,但我得到当它重新命名的目录下面的错误信息:无法重命名目录powershell

Rename-Item : Access to the path '\\DPR320-W12-1600\PRTG\6212016 backup' is denied. 

我想,这可能是由于正在发生被执行的行权之前,因为我不复制当该命令由自己运行时获取该错误消息。复制完成后,是否可以立即重命名文件夹?任何帮助将不胜感激。我已经完整地粘贴了下面的脚本。

$targetdirectory = "\\DPR320-W12-1600\PRTG" 
$sourcedirectory = "C:\Users\Public\Documents\PRTG Traffic Grapher" 
$todaysdate=get-date 
$minusoneweek=$todaysdate.adddays(-7) 
$minusdate=($minusoneweek.Month).tostring(),($minusoneweek.day).tostring(),($minusoneweek.year).tostring() 
$todaysdatestring=($todaysdate.Month).tostring(),($todaysdate.day).tostring(),($todaysdate.year).tostring() 
$oldfilename=$minusdate[0]+$minusdate[1]+$minusdate[2]+" backup" 
$newfilename=$todaysdatestring[0]+$todaysdatestring[1]+$todaysdatestring[2]+" backup" 
$Threshold = (get-date).AddMonths(-18) 
$culture = [Globalization.CultureInfo]::InvariantCulture 
$count=0 


Get-ChildItem $sourcedirectory\config | Where-Object { 
    $_.PsIsContainer -and 
    $_.BaseName -match '\d{6}' -and 
    ([DateTime]::ParseExact($_.BaseName, 'yyyyMMdd', $null) -gt (Get-Date).AddDays(-7)) 
} |Copy-Item -Recurse -Force -Destination $targetdirectory\$oldfilename\config 

Copy-Item -Force $sourcedirectory\config.csv -Destination $targetdirectory\$oldfilename 
Copy-Item -Force $sourcedirectory\config.prtg -Destination $targetdirectory\$oldfilename 

rename-item $targetdirectory\$oldfilename $newfilename 

$CleanupList = Get-ChildItem $targetdirectory\$newfilename\config 

foreach ($DirName in $CleanupList) 
{ 
try { 
    If([datetime]::ParseExact($DirName.BaseName, 'yyyyMMdd', $culture) -lt $Threshold) 

{ 
    write-host [datetime]::ParseExact($DirName.BaseName, 'yyyyMMdd', $culture) 
    #Remove-Item $DirName.FullName -Force -Recurse 

} 

Write-Host $count 
$count=$count+1 

} 


catch { 

Write-Host $count 
$count=$count+1 

    continue 
} 

} 

回答

1

你可以把一个while循环,将尝试重命名文件,直到成功为止:

while($true){ 
    try { 
     rename-item $targetdirectory\$oldfilename $newfilename -ErrorAction Stop 
     # It will only reach the break statement if rename-item was successful 
     # The break statement will exit the while loop 
     break 
    } 
    catch { 
     write-host "couldn't rename file..." 
     start-sleep -s 1 
    } 
} 

你可能也想添加一个计数器,打破,如果它不是成功后n尝试。否则,如果意外打开文件并将其保留在打开状态或拒绝访问(如防病毒拦截文件等),它可能会无限次地重试文件。