我需要将文件的位置添加到其名称中。
像这样: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
}
}
答案 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 }
}