将路径添加到压缩文件名

时间:2019-04-04 11:06:58

标签: powershell zip

我需要将文件的位置添加到其名称中。 像这样:C\user\someuser\folder\folder_logs

压缩文件的名称应为“ 2019_Jan_folder_logs”。

我一直工作到日期,无法添加名称。

    $Zip = $target_path + "" + "{0:yyyy}_{0:MMM}" -f $_.LastWriteTime
    & "C:\Program Files\7-Zip\7z.exe" u -mx9 -t7z -m0=lzma2 $Zip $_.FullName | Out-Null
    if ($LastExitCode -eq 0) {
        Remove-Item $_.FullName
    }
}

2 个答案:

答案 0 :(得分:1)

根据所需的zip名称,您只希望名称中包含路径的最后一部分。
例如,如果当前文件$_的LastWriteTime为2019年4月1日,则此

$targetpath = 'C:\user\someuser\folder\folder_logs'
$Zip = '{0:yyyy_MMM}_{1}' -f $_.LastWriteTime, (Split-Path -Path $targetpath -Leaf)

将导致

2019_Apr_folder_logs

但是,在代码块中,您颠倒了顺序并将$ targetpath放在新名称的前面。 在这里也这样做:

$Zip = '{0}_{1:yyyy_MMM}' -f (Split-Path -Path $targetpath -Leaf), $_.LastWriteTime

导致:

folder_logs_2019_Apr

您当然也可以在需要时附加实际文件名$_.BaseName

答案 1 :(得分:0)

谢谢。

现在我需要进行一些更改,在这里,在我的代码中,我一次要获取一个文件夹,如何为该任务添加多个文件夹?

我试图添加一个log_path_2,但是没有用

# set folder path
$log_path_1 = "C:\Logs\Logs_1"
$log_path_2 = "C:\Logs\Logs_2"

$target_path_1 = "C:\Logs\Logs_1\Logs_Zipados\"
$target_path_2 = "C:\Logs\Logs_2\Logs_Zipados\"

$pasta = "Logs_Zipados"


# set min age of files
$max_days = "-1"            

# get the current date
$curr_date = Get-Date

# determine how far back we go based on current date
$zip_date = $curr_date.AddDays($max_days)


# filter files
Get-ChildItem $log_path_1 | Where-Object { ($_.LastWriteTime -lt $zip_date) -and ($_.psIsContainer -eq $false)}|
Get-ChildItem $log_path_2 | Where-Object { ($_.LastWriteTime -lt $zip_date) -and ($_.psIsContainer -eq $false)}|

  ForEach {
    $Zip = $target_path_1, $target_path_2 + "" + "{0:yyyy}{0:MMM}"  -f $_.LastWriteTime + "_" + $pasta + ".7z"
    & "C:\Program Files\7-Zip\7z.exe" u -mx9 -t7z -m0=lzma2  $Zip $_.FullName |Out-Null             
    If ($LastExitCode -eq 0) { Remove-Item $_.FullName }
  }