一元网络论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 55|回复: 0

Windows bat脚本执行闪退,求助!

[复制链接]

3万

主题

3万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
95065
发表于 2024-10-30 16:53:19 | 显示全部楼层 |阅读模式
```batch
@echo off
setlocal enabledelayedexpansion
REM 设置控制台编码为 UTF-8
chcp 65001 >nul
REM 设置日志目录和路径
set "LOG_DIRS=C:\bp-front D:\bp-front"
set "EXTENSIONS=.log .txt .log.* .log.zip .LOG"
set "LOG_PATHS=D:*****.log C:*****.log D:*****.log.* C:*****.log.* C:****.txt D:****.txt D:*****.LOG C:*****.LOG"
REM 设置压缩后的存储路径
set "ARCHIVE_DIR=D:\logs\日志备份"
REM 获取六个月前的日期
for /f "delims=" %%i in ('powershell -command "(Get-Date).AddMonths(-6).ToString('yyyyMMdd')"') do (
set "sixMonthsAgoDate=%%i"
)
REM 确认是否继续
set /p CONTINUE="确定要删除这些日志吗?(y/n): "
if /i "!CONTINUE!" NEQ "y" goto :EOF
REM 创建压缩存储目录
if not exist "!ARCHIVE_DIR!" (
mkdir "!ARCHIVE_DIR!" && (
echo 目录 !ARCHIVE_DIR! 创建成功。
) || (
echo 创建目录失败,请检查权限或路径。
goto :EOF
)
REM 删除六个月前的文件夹
echo 开始检查并删除符合条件的文件夹…
for /d %%D in (D:\bp-front***) do (
if exist "%%D" (
set "shouldDelete=1"
for /r "%%D" %%F in (*) do (
set "fileDate=%%~tF"
set "fileDate=!fileDate:~0,10!"
set "fileDate=!fileDate:~6,4!!fileDate:~3,2!!fileDate:~0,2!"
if !fileDate! gtr !sixMonthsAgoDate! (
set "shouldDelete=0"
)
)
if !shouldDelete! equ 1 (
echo 删除文件夹 %%D…
rd /s /q "%%D" 2>nul
)
)
)
REM 处理日志文件夹并压缩
echo 开始压缩符合条件的日志文件夹…
for %%D in (!LOG_DIRS!) do (
for /d %%F in ("%%D*\log*") do (
if exist "%%F" (
set "archivePath=!ARCHIVE_DIR!%%~nF_!sixMonthsAgoDate!.zip"
echo 压缩目录 %%F…
powershell -command "Compress-Archive -Path '%%F' -DestinationPath '!archivePath!' -Force" && (
echo 压缩成功。
) || (
echo 压缩失败,请检查路径或权限。
goto :EOF
)
echo 删除目录 %%F…
rd /s /q "%%F" 2>nul
)
)
)
REM 删除日志文件
echo 开始删除符合条件的日志文件…
for %%D in (!LOG_DIRS!) do (
for %%E in (!EXTENSIONS!) do (
for /r %%D %%F in (%%E) do (
if exist "%%F" (
set "fileDate=%%~tF"
set "fileDate=!fileDate:~0,10!"
set "fileDate=!fileDate:~6,4!!fileDate:~3,2!!fileDate:~0,2!"
if !fileDate! leq !sixMonthsAgoDate! (
echo 删除文件 %%F…
del /q "%%F" 2>nul
)
)
)
)
)
REM 清理指定路径的日志文件
echo 开始清理指定路径的日志文件…
for %%P in (!LOG_PATHS!) do (
for /r %%F in (%%P) do (
if exist "%%F" (
set "fileDate=%%~tF"
set "fileDate=!fileDate:~0,10!"
set "fileDate=!fileDate:~6,4!!fileDate:~3,2!!fileDate:~0,2!"
if !fileDate! leq !sixMonthsAgoDate! (
echo 删除文件 %%F…
del /q "%%F" 2>nul
)
)
)
)
echo 完成日志清理。
REM 删除旧任务并创建新的任务计划
echo 删除旧的任务计划…
schtasks /delete /tn "MonthlyLogCleanup" /f >nul 2>&1 || echo 旧任务不存在,继续创建新任务。
echo 创建新的任务计划…
schtasks /create /tn "MonthlyLogCleanup" /tr "%~dp0%~n0.bat" /sc monthly /mo 1 /st 00:00 /f || (
echo 创建任务失败,请检查权限。
goto :EOF
)
echo 已成功添加任务到任务计划程序,每月执行一次。
REM 阻止控制台窗口关闭
pause
goto :EOF
```
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|一元网络论坛

GMT+8, 2024-11-24 13:01 , Processed in 0.105052 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表