各位大佬 这个Windows的bat脚本执行不下去 请教请教

@echo off

setlocal enabledelayedexpansion


REM 设置控制台编码为 UTF-8

chcp 65001 >nul


REM 设置日志目录

set “LOG_DIRS=C:\bp-front D:\bp-front”


REM 设置日志文件扩展名和路径

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”

)

echo 六个月前的日期:!sixMonthsAgoDate!


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!”

echo 文件 %%F 的日期是 !fileDate!

if !fileDate! gtr !sixMonthsAgoDate! (

set “shouldDelete=0”

echo 文件 %%F 的日期 !fileDate! 晚于六个月前的日期 !sixMonthsAgoDate!

)

)

if !shouldDelete! equ 1 (

echo 删除文件夹 %%D…

rd /s /q “%%D” 2>nul

if not exist “%%D” (

echo 文件夹 %%D 成功删除。

) else (

echo 文件夹 %%D 删除失败。

)

)

)

)


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

if not exist “%%F” (

echo 目录 %%F 成功删除。

) else (

echo 目录 %%F 删除失败。

)

)

)

)


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

if not exist “%%F” (

echo 文件 %%F 成功删除。

) else (

echo 文件 %%F 删除失败。

)

)

)

)

)

)


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

if not exist “%%F” (

echo 文件 %%F 成功删除。

) else (

echo 文件 %%F 删除失败。

)

)

)

)

)


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


举报· 25 次点击
登录 注册 站外分享
1 条回复  
pengzhile 初学 2024-10-30 11:54:53

首先你没提供报错信息。


另外我看到你把几乎所有的引号都写成中文引号了,能运行才奇怪

返回顶部