简记:清理指定后缀名文件的 powerhsell 小脚本

简介: 简记:清理指定后缀名文件的 powerhsell 小脚本

清理指定后缀名文件的 powerhsell 小脚本


1.介绍

在运维值班每天都需要从系统导出这种数据,压缩好放在工作电脑上,解压用脚本做汇总。但是长期都没删除各个日期下的压缩包。几年下来,有上千个目录,也不知道哪些目录中有没有删除的压缩包。一个一个手删太累了,不妨做个 powershell 小脚本一键搞定吧。

这个脚本同样适合于删除目录中其它后缀名的文件。

相关工具代码

后文用到了两个工具模块,这两个模块在我之前的两篇博客中有完整介绍和源代码:

2.目录结构

项目结构

日志结构

3.主函数部分

为了以后方便指定仅针对某个年份,或者修改为其它需要考虑年份的脚本,可以不要直接读取日志根目录中所有文件,而是逐个遍历所有年份下的文件夹:

function main($BASE_DIR) {
    $logger.Trace("Start compute...")
    $logger.Trace($BASE_DIR)
    $items = [Path]::get_items($BASE_DIR)
    foreach ($item in $items) {  
        Write-host -ForegroundColor 'Gray' "=========================================================================================================="
        # 对于目录
        $logger.Info("Current folder is: " + $item)
        if ([Path]::is_dirname($item)) {
            write-host -ForegroundColor 'DarkBlue' "=====> This is a folder!"
            foreach ($item in [Path]::get_descendants($item) ) {
                write-host -ForegroundColor 'DarkGreen' "=> This is a file!"$item
                if (IsArchiveFile($item)) {
                    write-host -ForegroundColor 'Yellow' " * This is a archive file, and it will be remove:"
                    write-host -ForegroundColor 'Green' "  "$item
                    deleteFileByPath($item)
                }
                else {
                    write-host -ForegroundColor 'Gray' " - But not a archive file"
                }
            }
            # 对于文件
        }
        elseif ([Path]::is_filename($item)) {
            write-host -ForegroundColor 'DarkGreen' "=> This is a file!"$item
            if (IsArchiveFile($item)) {
                write-host -ForegroundColor 'Yellow' " * This is a archive file, and it will be remove!"
                write-host -ForegroundColor 'Green' "  "$item
                deleteFileByPath($item)
            }
            else {
                write-host -ForegroundColor 'Gray' " - But not a archive file"
            }
        }
    }
}

4.正则匹配压缩文件后缀名 - 筛选压缩文件

function IsArchiveFile([string]$file_path) {
    $is7z = $file_path -match "\.7z$"
    $isZip = $file_path -match "\.zip$"
    $isTar = $file_path -match "\.tar$"
    $isWim = $file_path -match "\.wim$"
    $isAechiveFile = $is7z -or $isZip -or $isTar -or $isWim
    return $isAechiveFile
}

5.由路径删除文件,失败时提示

function deleteFileByPath([string]$file_path) {
    try{
        Remove-Item -Path $file_path
        write-host -ForegroundColor 'Blue' "Ok, this file has been removed!"
        return $True
    }catch{
        Write-Warning "An error occurred While delete file:"
        Write-Host $_
        return $False
    }
}

6.完整 clear_zip_7Z.ps1 代码

<#
@Author: Jack Lee;
@Email: 291148484@163.com;
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#>
using module .\utils\jcpath.psm1
using module .\utils\jclogger.psm1
$PRODUCTION_BASE_DIR = [Path]::get_dirpath([Path]::get_dirpath($MyInvocation.MyCommand.source))
$logger = [Logger]::new([Path]::Join($PRODUCTION_BASE_DIR, 'logs'));
function IsArchiveFile([string]$file_path) {
    $is7z = $file_path -match "\.7z$"
    $isZip = $file_path -match "\.zip$"
    $isTar = $file_path -match "\.tar$"
    $isWim = $file_path -match "\.wim$"
    $isAechiveFile = $is7z -or $isZip -or $isTar -or $isWim
    return $isAechiveFile
}
function deleteFileByPath([string]$file_path) {
    try {
        Remove-Item -Path $file_path
        write-host -ForegroundColor 'Blue' "Ok, this file has been removed!"
        return $True
    }
    catch {
        Write-Warning "An error occurred While delete file:"
        Write-Host $_
        return $False
    }
}
function main($BASE_DIR) {
    $logger.Trace("Start compute...")
    $logger.Trace($BASE_DIR)
    $items = [Path]::get_items($BASE_DIR)
    foreach ($item in $items ) {  
        Write-host -ForegroundColor 'Gray' "=========================================================================================================="
        # 对于目录
        $logger.Info("Current folder is: " + $item)
        if ([Path]::is_dirname($item)) {
            write-host -ForegroundColor 'DarkBlue' "=====> This is a folder!"
            foreach ($item in [Path]::get_descendants($item) ) {
                write-host -ForegroundColor 'DarkGreen' "=> This is a file!"$item
                if (IsArchiveFile($item)) {
                    write-host -ForegroundColor 'Yellow' " * This is a archive file, and it will be remove:"
                    write-host -ForegroundColor 'Green' "  "$item
                    deleteFileByPath($item)
                }
                else {
                    write-host -ForegroundColor 'Gray' " - But not a archive file"
                }
            }
            # 对于文件
        }
        elseif ([Path]::is_filename($item)) {
            write-host -ForegroundColor 'DarkGreen' "=> This is a file!"$item
            if (IsArchiveFile($item)) {
                write-host -ForegroundColor 'Yellow' " * This is a archive file, and it will be remove!"
                write-host -ForegroundColor 'Green' "  "$item
                deleteFileByPath($item)
            }
            else {
                write-host -ForegroundColor 'Gray' " - But not a archive file"
            }
        }
    }
}
main($PRODUCTION_BASE_DIR)
目录
相关文章
|
7月前
|
NoSQL Java Linux
Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
|
Windows
拷贝单个文件到U盘提示“目标文件系统 文件过大”,不需格式化解决
拷贝单个文件到U盘提示“目标文件系统 文件过大”,不需格式化解决
986 0
拷贝单个文件到U盘提示“目标文件系统 文件过大”,不需格式化解决
|
7月前
|
定位技术 Python
PowerShell批量修改、替换大量文件的文件名
PowerShell批量修改、替换大量文件的文件名
179 1
|
7月前
|
Linux Shell C语言
Linux编程之删除文件时排除某个文件
Linux编程之删除文件时排除某个文件
79 0
|
运维
清理指定后缀名文件的 powerhsell 小脚本
工作日记:清理指定后缀名文件的 powerhsell 小脚本
73 0
|
缓存 Windows
文件夹显示文件或目录损坏且没法读取
 用户反馈说Win7打开Local Settings文件夹提示“位置不可用,拒绝访问"怎么办?Local Settings是Windows系统中的一个隐藏文件,一般存放着和上网有关的历史记录和缓存之类的文件,如果打开Local Settings文件时提示"位置不可用,拒绝访问"下面跟随小编脚步一起看看具体解决方法。
647 0
VBS自编写脚本。(实现批量修改文件名且在执行前,备份原有文件夹中的文件)
'=========================================================================='' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.
1351 0