使用7zip压缩超过30天的文件

时间:2015-06-14 22:51:37

标签: powershell zip 7zip

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

我有以下文件夹结构。

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

服务器1文件夹可能包含以下文件夹:

W3SVC1
W3SVC2
W3SVC3

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

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

然后在每个此类Oldlogs-Server*-W3SVC*.zip子文件夹中创建一个名为W3SVC*的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 ########## 

1 个答案:

答案 0 :(得分:0)

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程序的参数给我。