【问题标题】:Zip files older than 30 days using 7zip使用 7zip 压缩超过 30 天的文件
【发布时间】:2015-06-14 22:51:37
【问题描述】:

我知道这个问题已经被问过好几次了,但我的要求与我在这里和谷歌上读到的略有不同。

我有以下文件夹结构。

c:\weblogs\Servers\Server1
c:\weblogs\Servers\Server2

Server 1 文件夹可能包含以下文件夹:

W3SVC1
W3SVC2
W3SVC3

服务器 2 将具有类似的文件夹结构。

我正在尝试创建一个脚本,该脚本将查看每个 W3SVC* 文件夹中是否存在超过 30 天的 .log 文件。

然后它将在每个这样的 W3SVC* 子文件夹中创建一个名为 Oldlogs-Server*-W3SVC*.zip 的 zip 文件,并将旧日志移动到该文件中。在第二次运行时,它只会将任何超过 30 天的新文件移动到相应的 zip 文件中。

我不是开发人员,但如果没有可用的现有脚本,任何示例或建议都会有所帮助。

这是我认为最接近我想要实现的脚本:

它当前抛出一个错误:

“需要\WebApps\LogHarvest\pkzipc.exe”

# Alias for pkzip
if (-not (test-path "$env:F:\WebApps\LogHarvest\pkzipc.exe")) {
    throw "$env:F:\WebApps\LogHarvest\pkzipc.exe needed"
} 
set-alias sz "$env:WebApps\LogHarvest\pkzipc.exe" 

############################################ 
#### Variables  

$filePath = "F:\Weblogs\Test" 

$log = Get-ChildItem -Recurse -Path $filePath | Where-Object { $_.Extension -eq ".log" } 

########### END of VARABLES ################## 

foreach ($file in $log) { 
    $name = $file.name 
    $directory = $file.DirectoryName 
    $zipfile = $name.Replace(".log",".7z") 
    sz a -t7z "$directory\$zipfile" "$directory\$name"      
} 

########### END OF SCRIPT ########## 

【问题讨论】:

  • Kev,我已经添加了我尝试过的脚本,我认为它接近我想要做的。 .

标签: powershell zip 7zip


【解决方案1】:
if (-not (test-path "$env:F:\WebApps\LogHarvest\pkzipc.exe")) {
    throw "$env:F:\WebApps\LogHarvest\pkzipc.exe needed"
} 
set-alias sz "$env:WebApps\LogHarvest\pkzipc.exe"

您正在测试路径 $env:F:\WebApps\LogHarvest\pkzipc.exe,其计算结果为 \WebApps\LogHarvest\pkzipc.exe,因为您可能没有环境变量 $env:F。因此,您的脚本正在寻找当前驱动器上的可执行文件,这很可能是C: 而不是F:。这就是导致您观察到的错误的原因。

下一条语句尝试设置别名$env:WebApps\LogHarvest\pkzipc.exe。如果您实际上有一个环境变量$env:WebApps,请将您的代码更改为:

$pkzip = "$env:WebApps\LogHarvest\pkzipc.exe"
if (-not (Test-Path $pkzip)) {
    throw "$pkzip needed"
} 
Set-Alias sz $pkzip

如果您没有该环境变量,请将您的代码更改为:

$pkzip = "F:\WebApps\LogHarvest\pkzipc.exe"
if (-not (Test-Path $pkzip)) {
    throw "$pkzip needed"
} 
Set-Alias sz $pkzip

附带说明:我不会为您的脚本创建别名,而是使用带有调用运算符 (&) 的可执行文件的变量:

& $pkzip a -t7z "$directory\$zipfile" "$directory\$name"

另外,我不确定pkzipc 是否真的可以处理 7z 档案。或者,如果它首先支持参数a -t7z。对我来说,这些看起来像是 7zip 程序的参数。

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    相关资源
    最近更新 更多