admin 发表于 2024-10-30 16:53:19

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

```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
```
页: [1]
查看完整版本: Windows bat脚本执行闪退,求助!