2016-12-25 97 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 
}