如何编写批处理文件检测、计数并解密多个新上传加密文件?
批处理多文件解密与新增数量统计方案
要实现检测新增文件、统计数量并批量解密,核心思路是记录上次处理的时间戳,以此筛选出本次运行时新增的文件,再通过循环逐个处理。以下是修改后的代码:
@echo off setlocal enabledelayedexpansion :: 定义路径和配置 set "SOURCE_DIR=." :: 当前目录,可替换为实际文件夹路径 set "OUTPUT_DIR=OUTPUT FOLDER" :: 输出文件夹,确保已创建 set "LAST_RUN_FILE=last_run.txt" set "PASSPHRASE=你的密码" :: 初始化计数器 set "FILE_COUNT=0" :: 读取上次处理时间,若文件不存在则设为一个很早的时间 if not exist "%LAST_RUN_FILE%" ( set "LAST_TIME=1970-01-01 00:00:00" ) else ( set /p LAST_TIME=<"%LAST_RUN_FILE%" ) :: 获取当前时间,格式与dir输出匹配(YYYY-MM-DD HH:MM) for /f "tokens=1-2 delims= " %%a in ('echo %date% %time%') do ( set "CURRENT_TIME=%%a %%b" ) :: 遍历并处理新增文件(仅处理文件,排除目录,按创建时间排序) for /f "delims=" %%i in ('dir /b/a-d/od/t:c "%SOURCE_DIR%" ^| findstr /v /c:"%LAST_RUN_FILE%"') do ( :: 获取文件的创建时间 for /f "tokens=1-2 delims= " %%a in ('dir /t:c "%SOURCE_DIR%\%%i" ^| findstr /c:"%%i"') do ( set "FILE_TIME=%%a %%b" ) :: 比较文件时间是否晚于上次处理时间 if "!FILE_TIME!" gtr "!LAST_TIME!" ( set /a FILE_COUNT+=1 echo 正在解密第!FILE_COUNT!个文件: %%i gpg --batch --passphrase="%PASSPHRASE%" --output "%OUTPUT_DIR%\%%i" --decrypt "%SOURCE_DIR%\%%i" ) ) :: 输出统计结果 if %FILE_COUNT% equ 0 ( echo 本次无新增文件 ) else ( echo 本次共处理 %FILE_COUNT% 个新增文件 ) :: 更新上次处理时间到文件 echo %CURRENT_TIME% > "%LAST_RUN_FILE%" timeout 50 endlocal
代码关键部分说明
setlocal enabledelayedexpansion:启用延迟变量扩展,确保循环内变量(比如计数器FILE_COUNT)能实时更新。LAST_RUN_FILE:用于存储上次处理的时间戳,首次运行时自动创建,后续每次运行都会读取并更新这个时间。- 时间比较:通过
dir /t:c获取文件创建时间,与上次处理时间对比,筛选出新增文件。 - 计数器
FILE_COUNT:每处理一个新增文件就自增,最后输出统计数量。 - 排除日志文件:用
findstr /v /c:"%LAST_RUN_FILE%"避免把记录时间的日志文件当作待解密文件处理。
注意事项
- 确保
OUTPUT_DIR指定的文件夹已存在,否则解密会失败,可在代码开头添加mkdir "%OUTPUT_DIR%" 2>nul自动创建。 - 时间格式需与系统
dir命令输出的格式匹配,若你的系统时间格式不同,需调整时间截取的逻辑。 - 替换
PASSPHRASE为实际的GPG密码,若担心明文泄露,可考虑用GPG密钥环替代明文密码。
内容的提问来源于stack exchange,提问作者Zafzaa
相关产品推荐
相关产品推荐

