2016-12-25 98 views
1

我對Powershell和腳本非常陌生,如果有人能夠提供幫助,我將非常感激。最後一天修改過的壓縮/壓縮文件

我正在嘗試創建一個PowerShell腳本,它執行以下操作來備份設置數量的目錄中每天的任何更改。

  • 從最近24小時內從多個預設位置遞歸地查找任何新的/修改過的文件或目錄。

  • 壓縮所有導致一個zip文件

  • 條目,同時保持

我設法找到取得使用下面的腳本的第一位工作的文件夾結構:

Get-ChildItem $SRC | Where {$_.PsIsContainer} | foreach-object { 
    Get-ChildItem $_ -Recurse -ErrorAction SilentlyContinue | 
    Where {$_.LastWriteTime -gt (get-date).AddDays(-1).date} | 
    Select FullName, LastWriteTime, Mode | Sort LastWriteTime, Mode 
} >> C:\temp\LastModified-$TimeStamp.log 

我有另一個腳本拉鍊給定的目錄,但我一直在努力使用上述腳本的結果robocopy文件到一個位置,然後我可以Zip或如果噸這裏有一種方法可以創建一個zip文件,而不必先將文件複製到某處,而不會丟失每個文件的文件夾結構?

我有以下腳本可以Zip給定的目錄(但我需要將多個目錄壓縮成一個zip文件,除非我先將文件robocopy在某處&如何讓robocopy只複製上次修改過的文件24小時)

$Source = 'C:\Users\Downloads\RobocopyLocation\' 
$Destination = 'D:\OneDrive\' 
$TimeStamp = Get-Date -f yyyyMMdd_HHmmss 
$ZipName = "$Destination\$TimeStamp" + '_Backup.zip ' 

Add-Type -Assembly "System.IO.Compression.FileSystem" ; 
[System.IO.Compression.ZipFile]::CreateFromDirectory($Source, $ZipName) 

當我運行下面的腳本,我得到和錯誤信息抱怨路徑參數爲空。

$F1 = 'C:\Users\Downloads\Folder A' 
$F2 = 'C:\Users\Downloads\Folder B' 
$F3 = 'C:\Users\Downloads\Folder C' 
$SrcFolders = ($F1, $F2, $F3); 
$BackupDrive = "D:\OneDrive" 
$DestFolders = ("$BackupDrive\Folder A", "$BackupDrive\Folder B", "$BackupDrive\Folder C"); 
$Destination = 'C:\Users\SysAdmin\Downloads\PLSWork\' 
$TimeStamp = Get-Date -f yyyyMMdd_HHmmss 
$ZipName = "$Destination\$TimeStamp" + '_Backup.zip ' 
$Option = "{$_.PsIsContainer} | foreach-object { Get-ChildItem $_ -Recurse -ErrorAction SilentlyContinue | Where {$_.LastWriteTime -gt (get-date).AddDays(-1).date} | Select FullName, LastWriteTime, Mode | Sort LastWriteTime, Mode}" 


Foreach ($SrcFolders in (Get-ChildItem $SrcFolders | where $Option)){ 


Add-Type -Assembly "System.IO.Compression.FileSystem" ; 
[System.IO.Compression.ZipFile]::CreateFromDirectory($SrcFolders, $ZipName) 
} 

回答

1

修改行

$ZipName = "$Destination\$TimeStamp" + '_Backup.zip ' 

$ZipName = "$Destination$TimeStamp" + '_Backup.zip ' 
+0

「我得到的和錯誤消息抱怨路徑參數爲空」 – 4c74356b41

+0

能否請您發佈錯誤?我們需要弄清楚,PowerShell在拋出Null異常的地方。 –

0

怎麼這樣呢?

$RootPath = "P:\PSZip\" 
$Folders = (
    "Folder A", 
    "Folder B", 
    "Folder C" 
) 
$BackupFolder = "P:\PSZip\Destination\" 
$Files = @() 

foreach($Folder in $Folders) { 
    $Files = Get-ChildItem ("{0}{1}\" -f $RootPath, $Folder) | Where {$_.PSIsContainer} | ForEach-Object { Get-ChildItem $_.FullName -Recurse | Where { $_.LastWriteTime -gt (Get-Date).AddDays(-1) } } 
    $ZipName = ("{0}{1}\{2}_Backup.zip" -f $BackupFolder, $Folder, (Get-Date -f yyyyMMdd_HHmmss)) 
    Compress-Archive -Path $Files.FullName -DestinationPath $ZipName 
}