151 lines
4.1 KiB
Batchfile
151 lines
4.1 KiB
Batchfile
@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%
|
||
|
|
|
||
|
|
:: 接下来读取这个目录下的所有文件,挨个处理
|
||
|
|
for /f "delims=" %%F in ('dir /a-d /b "%configpath%\*" 2^>nul') do (
|
||
|
|
echo 为文件 "%configpath%\%%F" 创建软连接
|
||
|
|
call :link %%F
|
||
|
|
)
|
||
|
|
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
|