From a0243f4985daf9e3948c5bbfca28fbcc2ad50d8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=B0=B8=E5=85=A8?= Date: Tue, 20 Jan 2026 06:36:26 +0000 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96bat=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bat/Initialization.bat | 150 ++++++++++++++++++++++++++++ bat/autosync.bat | 65 +++++++++++++ bat/autosync.log | 204 +++++++++++++++++++++++++++++++++++++++ bat/get_idle_minutes.ps1 | 27 ++++++ bat/run_hidden.vbs | 22 +++++ 5 files changed, 468 insertions(+) create mode 100644 bat/Initialization.bat create mode 100644 bat/autosync.bat create mode 100644 bat/autosync.log create mode 100644 bat/get_idle_minutes.ps1 create mode 100644 bat/run_hidden.vbs diff --git a/bat/Initialization.bat b/bat/Initialization.bat new file mode 100644 index 0000000..5d498ef --- /dev/null +++ b/bat/Initialization.bat @@ -0,0 +1,150 @@ +@echo off +setlocal + +::获取输入程序所在目录(通过注册表中的卸载路径) +:: 注册表路径 +set "regKeOFUninstall=HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Weasel" +:: 读取 UninstallString 值 +for /f "tokens=2*" %%a in ('reg query "%regKeOFUninstall%" /v "UninstallString" 2^>nul ^| findstr /i "UninstallString"') do ( + set "uninstallCmd=%%b" +) + +:: 检查是否找到 +if not defined uninstallCmd ( + echo 错误:未找到小狼毫(Weasel)的注册表项。 + pause + exit /b 1 +) + +::得到卸载程序目录 +echo %uninstallCmd% + +:: 去掉开头和结尾的引号,得到的目录,首尾有双引号,需要去掉 +call set "clean=%%uninstallCmd:"=%%" + +:: 提取所在的路径,也就是安装目录 +for %%I in ("%clean%") do set "apppath=%%~dpI" +echo 输入法程序安装在%apppath%WeaselDeployer.exe + +:: 找到用户文件夹路径,通过注册表中的路径 +set "regKeyOfUserDIR=HKCU\SOFTWARE\Rime\Weasel" +:: 读取 RimeUserDir 的值 +for /f "tokens=2*" %%a in ('reg query "%regKeyOfUserDIR%" /v "RimeUserDir" 2^>nul ^| findstr /i "RimeUserDir"') do ( + set "rimeUserDir=%%b" +) +:: 检查是否成功读取 +if not defined rimeUserDir ( + echo 错误:未找到 RimeUserDir 注册表项。 + pause + exit /b 1 +) + +echo 注册表读取的Rime用户目录: %rimeUserDir% +:: 去掉开头和结尾的引号,得到的目录,首尾有双引号,需要去掉,去掉后得到的就是用户目录 +call set "userpath=%%rimeUserDir:"=%%" +echo 获得的用户目录是:%userpath% + +:: 获取当前批处理文件所在目录(结尾带反斜杠) +set "CURRENT_DIR=%~dp0" +:: 构建 autosync.bat 的完整路径,为了后续添加定时任务 +set "TARGET_SCRIPT=%CURRENT_DIR%autosync.bat" +set "TARGET_VBS=%CURRENT_DIR%run_hidden.vbs" +set "CMD=wscript.exe //nologo \"%CURRENT_DIR%run_hidden.vbs\" \"%CURRENT_DIR%autosync.bat\"" +:: 去掉末尾的反斜杠(便于处理) +if "%CURRENT_DIR:~-1%"=="\" set "CURRENT_DIR=%CURRENT_DIR:~0,-1%" + +:: 获取上层目录(父目录) +for %%I in ("%CURRENT_DIR%") do set "PARENT_DIR=%%~dpI" +:: 拼接config +set "configpath=%PARENT_DIR%config" +echo 获得的配置文件目录是:%configpath% +call :link "custom_phrase.txt" +call :link "default.custom.yaml" +call :link "weasel.custom.yaml" +call :link "weasel.yaml" +call :link "default.yaml" +pause +echo 接下来重新部署输入法 + +if exist "%apppath%\WeaselDeployer.exe" ( + "%apppath%WeaselDeployer.exe" /deploy + echo 部署功能应该已经启动,确定后按任意键退出. + pause +) else ( + echo 没有找到可执行程序,请检查目录后重试 + pause + exit /b 1 +) +:: 接下来设置定时任务 +echo 目标bat文件路径%TARGET_SCRIPT% + +:: 检查 autosync.bat 是否存在 +if not exist "%TARGET_SCRIPT%" ( + echo 错误:未找到 %TARGET_SCRIPT% + pause + exit /b 1 +) +echo 目标vbs文件路径%TARGET_VBS% + +:: 检查 autosync.bat 是否存在 +if not exist "%TARGET_VBS%" ( + echo 错误:未找到 %TARGET_VBS% + pause + exit /b 1 +) +:: 转义路径中的空格和特殊字符(用双引号包裹,并在 schtasks 中用 \" 转义) +set "QUOTED_SCRIPT=\"%TARGET_SCRIPT%\"" +:: 任务名称 +set "TASK_NAME=RimeAutoSync" + +:: 创建每10分钟运行一次的任务(从现在开始,每天重复) +schtasks /create ^ + /tn "%TASK_NAME%" ^ + /tr "%CMD%" ^ + /sc minute ^ + /mo 10 ^ + /f + +if %errorlevel% equ 0 ( + echo. + echo 定时任务创建成功! + echo - 任务名称: %TASK_NAME% + echo - 执行频率: 每 10 分钟检查一次 + echo - 实际同步条件: 系统空闲 ≥30 分钟 + echo - 脚本路径: %CMD% + echo. + echo 注意:请确保 autosync.bat 与本脚本在同一目录。 +) else ( + echo 创建失败。建议以管理员身份运行(非必须,但可避免权限问题)。 +) + +echo 任务创建成功,按任意键退出. +pause +goto :eof +:: ================= 函数定义(用来创建文件软连接) ================= +:link +set "filename=%~1" +::设置软连链接 +echo 开始处理%filename% +set "TARGET=%configpath%\%filename%" +set "LINK=%userpath%\%filename%" +echo 目标文件是:%TARGET% +echo 软连接文件是:%LINK% +if exist "%TARGET%" ( + echo 找到配置文件了%TARGET% +) else ( + echo 配置目录下没有%filename%文件,请检查 + pause + exit /b 1 +) + +if exist "%LINK%" ( + echo 文件 %LINK% 已经存在,创建软连接前会删除文件,请确保该文件已经备份,然后按回车键继续,否则,请关闭后备份。 + set /p "dummy=" + del "%LINK%" +) else ( + echo 文件 %LINK% 不存在! +) +:: 前面如果用户已经按了回车,说明同意删除原来的文件,现在就可以创建文件软链接了 +mklink "%LINK%" "%TARGET%" +goto :eof \ No newline at end of file diff --git a/bat/autosync.bat b/bat/autosync.bat new file mode 100644 index 0000000..13c93b2 --- /dev/null +++ b/bat/autosync.bat @@ -0,0 +1,65 @@ +@echo off +setlocal enabledelayedexpansion +::定时同步,如果空闲时间超过30分钟,就同步,否则就什么都不执行 +set "SCRIPT_DIR=%~dp0" +set "LOG=%SCRIPT_DIR%autosync.log" +set "PS1=%SCRIPT_DIR%get_idle_minutes.ps1" +:: 检查 PowerShell 脚本是否存在 +if not exist "%PS1%" ( + echo 错误:缺少 get_idle_minutes.ps1 + exit /b 1 +) + +:: 调用 PowerShell 获取空闲分钟数 +for /f "delims=" %%i in ('powershell -ExecutionPolicy Bypass -File "%PS1%" 2^>nul') do ( + set "idle_min=%%i" +) + +:: 验证是否获取到数字 +set "is_number=0" +for /f "delims=0123456789" %%a in ("%idle_min%") do set "is_number=1" +if %is_number% equ 1 ( + echo [%date% %time%] 无法获取空闲时间,跳过。 >> "%LOG%" + exit /b +) + +:: 记录日志 +echo [%date% %time%] 空闲时间: %idle_min% 分钟 >> "%LOG%" + +:: 判断是否 ≥30 分钟 +if %idle_min% GEQ 30 ( + echo [%date% %time%] 满足条件,开始同步... >> "%LOG%" + + :: === 你的同步命令 === + :: 注册表路径 +set "regKey=HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Weasel" + +:: 读取 UninstallString 值 +for /f "tokens=2*" %%a in ('reg query "%regKey%" /v "UninstallString" 2^>nul ^| findstr /i "UninstallString"') do ( + set "uninstallCmd=%%b" +) + +:: 检查是否找到 +if not defined uninstallCmd ( + echo 错误:未找到小狼毫(Weasel)的注册表项。 + pause + exit /b 1 +) + +:: 去掉开头和结尾的引号 +call set "clean=%%uninstallCmd:"=%%" + +:: 获取上层目录(父目录) +for %%I in ("%clean%") do set "apppath=%%~dpI" +:: 同步 +"%apppath%WeaselDeployer.exe" /sync + +:: 暂停30秒,给出同步时间 +timeout /t 30 /nobreak >nul +:: 同步后重新部署 +"%apppath%WeaselDeployer.exe" /deploy + + echo [%date% %time%] 同步完成。 >> "%LOG%" +) else ( + echo [%date% %time%] 未满足空闲条件,跳过。 >> "%LOG%" +) \ No newline at end of file diff --git a/bat/autosync.log b/bat/autosync.log new file mode 100644 index 0000000..34800fd --- /dev/null +++ b/bat/autosync.log @@ -0,0 +1,204 @@ +[2026/01/19 周一 22:09:11.20] 空闲时间: 0 分钟 +[2026/01/19 周一 22:09:11.20] 未满足空闲条件,跳过。 +[2026/01/19 周一 22:12:20.73] 空闲时间: 0 分钟 +[2026/01/19 周一 22:12:20.73] 未满足空闲条件,跳过。 +[2026/01/19 周一 22:14:07.79] 空闲时间: 0 分钟 +[2026/01/19 周一 22:14:07.79] 未满足空闲条件,跳过。 +[2026/01/19 周一 22:16:02.07] 空闲时间: 0 分钟 +[2026/01/19 周一 22:16:02.08] 未满足空闲条件,跳过。 +[2026/01/19 周一 22:26:01.09] 空闲时间: 8 分钟 +[2026/01/19 周一 22:26:01.09] 未满足空闲条件,跳过。 +[2026/01/19 周一 22:36:01.09] 空闲时间: 5 分钟 +[2026/01/19 周一 22:36:01.09] 未满足空闲条件,跳过。 +[2026/01/19 周一 22:46:01.10] 空闲时间: 8 分钟 +[2026/01/19 周一 22:46:01.10] 未满足空闲条件,跳过。 +[2026/01/19 周一 22:56:01.11] 空闲时间: 18 分钟 +[2026/01/19 周一 22:56:01.11] 未满足空闲条件,跳过。 +[2026/01/19 周一 23:06:01.11] 空闲时间: 28 分钟 +[2026/01/19 周一 23:06:01.11] 未满足空闲条件,跳过。 +[2026/01/19 周一 23:16:01.12] 空闲时间: 38 分钟 +[2026/01/19 周一 23:16:01.12] 满足条件,开始同步... +[2026/01/19 周一 23:26:01.14] 空闲时间: 48 分钟 +[2026/01/19 周一 23:26:01.14] 满足条件,开始同步... +[2026/01/19 周一 23:36:01.16] 空闲时间: 58 分钟 +[2026/01/19 周一 23:36:01.16] 满足条件,开始同步... +[2026/01/19 周一 23:46:01.15] 空闲时间: 68 分钟 +[2026/01/19 周一 23:46:01.15] 满足条件,开始同步... +[2026/01/19 周一 23:56:01.15] 空闲时间: 78 分钟 +[2026/01/19 周一 23:56:01.15] 满足条件,开始同步... +[2026/01/20 周二 0:06:01.17] 空闲时间: 88 分钟 +[2026/01/20 周二 0:06:01.17] 满足条件,开始同步... +[2026/01/20 周二 0:16:01.17] 空闲时间: 98 分钟 +[2026/01/20 周二 0:16:01.17] 满足条件,开始同步... +[2026/01/20 周二 0:26:01.19] 空闲时间: 108 分钟 +[2026/01/20 周二 0:26:01.19] 满足条件,开始同步... +[2026/01/20 周二 0:36:01.17] 空闲时间: 118 分钟 +[2026/01/20 周二 0:36:01.17] 满足条件,开始同步... +[2026/01/20 周二 0:46:01.27] 空闲时间: 3 分钟 +[2026/01/20 周二 0:46:01.27] 未满足空闲条件,跳过。 +[2026/01/20 周二 0:56:02.36] 空闲时间: 13 分钟 +[2026/01/20 周二 0:56:02.36] 未满足空闲条件,跳过。 +[2026/01/20 周二 1:06:02.25] 空闲时间: 23 分钟 +[2026/01/20 周二 1:06:02.25] 未满足空闲条件,跳过。 +[2026/01/20 周二 1:16:02.39] 空闲时间: 33 分钟 +[2026/01/20 周二 1:16:02.39] 满足条件,开始同步... +[2026/01/20 周二 1:26:02.22] 空闲时间: 43 分钟 +[2026/01/20 周二 1:26:02.22] 满足条件,开始同步... +[2026/01/20 周二 1:36:02.30] 空闲时间: 53 分钟 +[2026/01/20 周二 1:36:02.30] 满足条件,开始同步... +[2026/01/20 周二 1:46:02.27] 空闲时间: 63 分钟 +[2026/01/20 周二 1:46:02.27] 满足条件,开始同步... +[2026/01/20 周二 1:56:02.56] 空闲时间: 73 分钟 +[2026/01/20 周二 1:56:02.56] 满足条件,开始同步... +[2026/01/20 周二 2:06:02.35] 空闲时间: 83 分钟 +[2026/01/20 周二 2:06:02.35] 满足条件,开始同步... +[2026/01/20 周二 2:16:02.63] 空闲时间: 93 分钟 +[2026/01/20 周二 2:16:02.63] 满足条件,开始同步... +[2026/01/20 周二 2:26:02.24] 空闲时间: 103 分钟 +[2026/01/20 周二 2:26:02.24] 满足条件,开始同步... +[2026/01/20 周二 2:36:02.19] 空闲时间: 113 分钟 +[2026/01/20 周二 2:36:02.20] 满足条件,开始同步... +[2026/01/20 周二 2:46:02.26] 空闲时间: 123 分钟 +[2026/01/20 周二 2:46:02.26] 满足条件,开始同步... +[2026/01/20 周二 2:56:02.01] 空闲时间: 133 分钟 +[2026/01/20 周二 2:56:02.01] 满足条件,开始同步... +[2026/01/20 周二 3:06:01.28] 空闲时间: 143 分钟 +[2026/01/20 周二 3:06:01.28] 满足条件,开始同步... +[2026/01/20 周二 3:16:01.29] 空闲时间: 153 分钟 +[2026/01/20 周二 3:16:01.29] 满足条件,开始同步... +[2026/01/20 周二 3:26:01.31] 空闲时间: 163 分钟 +[2026/01/20 周二 3:26:01.31] 满足条件,开始同步... +[2026/01/20 周二 3:36:01.31] 空闲时间: 173 分钟 +[2026/01/20 周二 3:36:01.31] 满足条件,开始同步... +[2026/01/20 周二 3:46:01.32] 空闲时间: 183 分钟 +[2026/01/20 周二 3:46:01.32] 满足条件,开始同步... +[2026/01/20 周二 3:56:01.33] 空闲时间: 193 分钟 +[2026/01/20 周二 3:56:01.33] 满足条件,开始同步... +[2026/01/20 周二 4:06:01.34] 空闲时间: 203 分钟 +[2026/01/20 周二 4:06:01.34] 满足条件,开始同步... +[2026/01/20 周二 4:16:01.35] 空闲时间: 213 分钟 +[2026/01/20 周二 4:16:01.35] 满足条件,开始同步... +[2026/01/20 周二 4:26:01.36] 空闲时间: 223 分钟 +[2026/01/20 周二 4:26:01.36] 满足条件,开始同步... +[2026/01/20 周二 4:36:01.36] 空闲时间: 233 分钟 +[2026/01/20 周二 4:36:01.36] 满足条件,开始同步... +[2026/01/20 周二 4:46:01.37] 空闲时间: 243 分钟 +[2026/01/20 周二 4:46:01.37] 满足条件,开始同步... +[2026/01/20 周二 4:56:01.37] 空闲时间: 253 分钟 +[2026/01/20 周二 4:56:01.37] 满足条件,开始同步... +[2026/01/20 周二 5:06:01.38] 空闲时间: 263 分钟 +[2026/01/20 周二 5:06:01.38] 满足条件,开始同步... +[2026/01/20 周二 5:16:01.39] 空闲时间: 273 分钟 +[2026/01/20 周二 5:16:01.39] 满足条件,开始同步... +[2026/01/20 周二 5:26:01.41] 空闲时间: 283 分钟 +[2026/01/20 周二 5:26:01.41] 满足条件,开始同步... +[2026/01/20 周二 5:36:01.40] 空闲时间: 293 分钟 +[2026/01/20 周二 5:36:01.40] 满足条件,开始同步... +[2026/01/20 周二 5:46:01.42] 空闲时间: 303 分钟 +[2026/01/20 周二 5:46:01.42] 满足条件,开始同步... +[2026/01/20 周二 5:56:01.42] 空闲时间: 313 分钟 +[2026/01/20 周二 5:56:01.42] 满足条件,开始同步... +[2026/01/20 周二 6:06:01.42] 空闲时间: 323 分钟 +[2026/01/20 周二 6:06:01.42] 满足条件,开始同步... +[2026/01/20 周二 6:16:01.43] 空闲时间: 333 分钟 +[2026/01/20 周二 6:16:01.43] 满足条件,开始同步... +[2026/01/20 周二 6:26:01.44] 空闲时间: 343 分钟 +[2026/01/20 周二 6:26:01.44] 满足条件,开始同步... +[2026/01/20 周二 6:36:01.45] 空闲时间: 353 分钟 +[2026/01/20 周二 6:36:01.45] 满足条件,开始同步... +[2026/01/20 周二 6:46:01.45] 空闲时间: 363 分钟 +[2026/01/20 周二 6:46:01.45] 满足条件,开始同步... +[2026/01/20 周二 6:56:01.57] 空闲时间: 373 分钟 +[2026/01/20 周二 6:56:01.57] 满足条件,开始同步... +[2026/01/20 周二 7:06:01.47] 空闲时间: 383 分钟 +[2026/01/20 周二 7:06:01.47] 满足条件,开始同步... +[2026/01/20 周二 7:16:01.48] 空闲时间: 393 分钟 +[2026/01/20 周二 7:16:01.48] 满足条件,开始同步... +[2026/01/20 周二 7:26:01.49] 空闲时间: 403 分钟 +[2026/01/20 周二 7:26:01.49] 满足条件,开始同步... +[2026/01/20 周二 7:36:01.51] 空闲时间: 0 分钟 +[2026/01/20 周二 7:36:01.52] 未满足空闲条件,跳过。 +[2026/01/20 周二 7:46:01.52] 空闲时间: 7 分钟 +[2026/01/20 周二 7:46:01.52] 未满足空闲条件,跳过。 +[2026/01/20 周二 7:56:01.51] 空闲时间: 17 分钟 +[2026/01/20 周二 7:56:01.51] 未满足空闲条件,跳过。 +[2026/01/20 周二 8:06:01.52] 空闲时间: 27 分钟 +[2026/01/20 周二 8:06:01.52] 未满足空闲条件,跳过。 +[2026/01/20 周二 8:16:01.51] 空闲时间: 37 分钟 +[2026/01/20 周二 8:16:01.51] 满足条件,开始同步... +[2026/01/20 周二 8:26:00.53] 空闲时间: 0 分钟 +[2026/01/20 周二 8:26:00.54] 未满足空闲条件,跳过。 +[2026/01/20 周二 8:36:00.53] 空闲时间: 0 分钟 +[2026/01/20 周二 8:36:00.53] 未满足空闲条件,跳过。 +[2026/01/20 周二 8:46:00.54] 空闲时间: 9 分钟 +[2026/01/20 周二 8:46:00.54] 未满足空闲条件,跳过。 +[2026/01/20 周二 8:56:00.55] 空闲时间: 19 分钟 +[2026/01/20 周二 8:56:00.55] 未满足空闲条件,跳过。 +[2026/01/20 周二 9:06:01.02] 空闲时间: 29 分钟 +[2026/01/20 周二 9:06:01.02] 未满足空闲条件,跳过。 +[2026/01/20 周二 9:16:00.61] 空闲时间: 0 分钟 +[2026/01/20 周二 9:16:00.61] 未满足空闲条件,跳过。 +[2026/01/20 周二 9:26:00.56] 空闲时间: 0 分钟 +[2026/01/20 周二 9:26:00.57] 未满足空闲条件,跳过。 +[2026/01/20 周二 9:36:00.60] 空闲时间: 0 分钟 +[2026/01/20 周二 9:36:00.60] 未满足空闲条件,跳过。 +[2026/01/20 周二 9:46:01.28] 空闲时间: 0 分钟 +[2026/01/20 周二 9:46:01.28] 未满足空闲条件,跳过。 +[2026/01/20 周二 9:56:00.61] 空闲时间: 0 分钟 +[2026/01/20 周二 9:56:00.61] 未满足空闲条件,跳过。 +[2026/01/20 周二 10:06:00.64] 空闲时间: 0 分钟 +[2026/01/20 周二 10:06:00.64] 未满足空闲条件,跳过。 +[2026/01/20 周二 10:16:00.63] 空闲时间: 0 分钟 +[2026/01/20 周二 10:16:00.63] 未满足空闲条件,跳过。 +[2026/01/20 周二 10:26:01.29] 空闲时间: 8 分钟 +[2026/01/20 周二 10:26:01.29] 未满足空闲条件,跳过。 +[2026/01/20 周二 10:36:00.82] 空闲时间: 18 分钟 +[2026/01/20 周二 10:36:00.82] 未满足空闲条件,跳过。 +[2026/01/20 周二 10:46:00.84] 空闲时间: 28 分钟 +[2026/01/20 周二 10:46:00.84] 未满足空闲条件,跳过。 +[2026/01/20 周二 10:56:00.81] 空闲时间: 38 分钟 +[2026/01/20 周二 10:56:00.81] 满足条件,开始同步... +[2026/01/20 周二 11:06:00.80] 空闲时间: 48 分钟 +[2026/01/20 周二 11:06:00.80] 满足条件,开始同步... +[2026/01/20 周二 11:16:00.86] 空闲时间: 58 分钟 +[2026/01/20 周二 11:16:00.86] 满足条件,开始同步... +[2026/01/20 周二 11:26:00.88] 空闲时间: 0 分钟 +[2026/01/20 周二 11:26:00.88] 未满足空闲条件,跳过。 +[2026/01/20 周二 11:36:00.84] 空闲时间: 4 分钟 +[2026/01/20 周二 11:36:00.84] 未满足空闲条件,跳过。 +[2026/01/20 周二 11:46:00.69] 空闲时间: 14 分钟 +[2026/01/20 周二 11:46:00.69] 未满足空闲条件,跳过。 +[2026/01/20 周二 11:56:00.79] 空闲时间: 0 分钟 +[2026/01/20 周二 11:56:00.79] 未满足空闲条件,跳过。 +[2026/01/20 周二 12:06:00.81] 空闲时间: 0 分钟 +[2026/01/20 周二 12:06:00.81] 未满足空闲条件,跳过。 +[2026/01/20 周二 12:16:00.78] 空闲时间: 0 分钟 +[2026/01/20 周二 12:16:00.78] 未满足空闲条件,跳过。 +[2026/01/20 周二 12:26:00.72] 空闲时间: 9 分钟 +[2026/01/20 周二 12:26:00.72] 未满足空闲条件,跳过。 +[2026/01/20 周二 12:36:00.85] 空闲时间: 0 分钟 +[2026/01/20 周二 12:36:00.85] 未满足空闲条件,跳过。 +[2026/01/20 周二 12:46:00.85] 空闲时间: 0 分钟 +[2026/01/20 周二 12:46:00.85] 未满足空闲条件,跳过。 +[2026/01/20 周二 12:56:00.86] 空闲时间: 0 分钟 +[2026/01/20 周二 12:56:00.86] 未满足空闲条件,跳过。 +[2026/01/20 周二 13:06:00.84] 空闲时间: 2 分钟 +[2026/01/20 周二 13:06:00.84] 未满足空闲条件,跳过。 +[2026/01/20 周二 13:16:00.76] 空闲时间: 9 分钟 +[2026/01/20 周二 13:16:00.76] 未满足空闲条件,跳过。 +[2026/01/20 周二 13:26:00.76] 空闲时间: 19 分钟 +[2026/01/20 周二 13:26:00.76] 未满足空闲条件,跳过。 +[2026/01/20 周二 13:36:00.77] 空闲时间: 29 分钟 +[2026/01/20 周二 13:36:00.77] 未满足空闲条件,跳过。 +[2026/01/20 周二 13:46:00.77] 空闲时间: 39 分钟 +[2026/01/20 周二 13:46:00.77] 满足条件,开始同步... +[2026/01/20 周二 13:56:00.77] 空闲时间: 49 分钟 +[2026/01/20 周二 13:56:00.78] 满足条件,开始同步... +[2026/01/20 周二 14:06:00.78] 空闲时间: 59 分钟 +[2026/01/20 周二 14:06:00.78] 满足条件,开始同步... +[2026/01/20 周二 14:16:00.78] 空闲时间: 69 分钟 +[2026/01/20 周二 14:16:00.78] 满足条件,开始同步... +[2026/01/20 周二 14:26:00.79] 空闲时间: 79 分钟 +[2026/01/20 周二 14:26:00.79] 满足条件,开始同步... +[2026/01/20 周二 14:36:00.92] 空闲时间: 0 分钟 +[2026/01/20 周二 14:36:00.92] 未满足空闲条件,跳过。 diff --git a/bat/get_idle_minutes.ps1 b/bat/get_idle_minutes.ps1 new file mode 100644 index 0000000..408420e --- /dev/null +++ b/bat/get_idle_minutes.ps1 @@ -0,0 +1,27 @@ +# get_idle_minutes.ps1 +Add-Type @" +using System; +using System.Runtime.InteropServices; + +public class User32 { + [StructLayout(LayoutKind.Sequential)] + public struct LASTINPUTINFO { + public uint cbSize; + public uint dwTime; + } + + [DllImport("user32.dll")] + public static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); +} +"@ + +$lii = New-Object User32+LASTINPUTINFO +$lii.cbSize = [System.Runtime.InteropServices.Marshal]::SizeOf($lii) +[User32]::GetLastInputInfo([ref]$lii) + +$tickCount = [Environment]::TickCount +$idleTicks = $tickCount - $lii.dwTime +if ($idleTicks -lt 0) { $idleTicks += 0x100000000 } + +$idleMinutes = [Math]::Floor($idleTicks / 1000 / 60) +Write-Output $idleMinutes \ No newline at end of file diff --git a/bat/run_hidden.vbs b/bat/run_hidden.vbs new file mode 100644 index 0000000..e0c1251 --- /dev/null +++ b/bat/run_hidden.vbs @@ -0,0 +1,22 @@ +' run_hidden.vbs +' 鐢ㄩ旓細闈欓粯杩愯浼犲叆鐨勫懡浠よ绋嬪簭锛堟棤绐楀彛銆佹棤闂儊锛 +' 鐢ㄦ硶锛歸script.exe //nologo "run_hidden.vbs" "C:\path\to\your.bat" + +If WScript.Arguments.Count = 0 Then + WScript.Quit 1 +End If + +Dim strCommand +strCommand = WScript.Arguments(0) + +' 濡傛灉鏈夊涓弬鏁帮紙濡傚甫鍙傛暟鐨勫懡浠わ級锛屽彲浠ユ嫾鎺ワ紙鏈緥鍙紶涓涓 .bat 璺緞锛 +' 渚嬪锛歐Script.Arguments(0) 鏄矾寰勶紝鍚庣画鍙姞 WScript.Arguments(1) 绛 + +Dim objShell +Set objShell = CreateObject("WScript.Shell") + +' 绗簩涓弬鏁 0 琛ㄧず闅愯棌绐楀彛锛圫W_HIDE锛 +' 绗笁涓弬鏁 False 琛ㄧず涓嶇瓑寰呰繘绋嬬粨鏉燂紙寮傛鎵ц锛 +objShell.Run """" & strCommand & """", 0, False + +Set objShell = Nothing \ No newline at end of file