卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章11201本站已运行3223

Alist开机启动批处理脚本-利用ALIST和阿里云,搭建本地影音共享系统。

本人在网上折腾很多教程,以及用了论坛提供的提脚,有些是以SH,安装GIT工具来做为开机启动,有些是用VBS脚本来实现,总之特别麻烦。而且需要安装这安装那,我比较懒,干脆动手做一个批处理脚本解决。不多说,先放代码。本脚本是方便Alist搭建网盘,可以配置阿里云,123PAN,百度云等网盘挂载为本地,以WEBDAV的形式挂载。比网上的教程要方便好用。

本脚本的特色自动下载最新的Alist,并且以windows服务的方式启动自动下载最新的RaiDrive,全自动安装自动更新Alist为最新的,每隔三天左右更新一次,添加为计划任务。安装过程中完全自动化,无需手工,会自动显示Alist账号和密码。安装过程中会弹出web界面进行初始化设备会自动添加Alist的目录为环境变量,方便以后执行alist的相关命令,可以在cmd下执行alist --help查看需要设置的是两个地方,一个alistpath就是alist安装路径还有一个需要设置的就是alist服务名,也可以不用改,根据自己的爱好。

最新更新,本人经过大量的测试后再次放出最完美的版本,2022-11.19再次更新
已经更新了自动屏蔽RaiDrive广告
再次更新了,新加了迁移功能

有些朋友之前用了Alist,为了方便各位童鞋的使用,新增了迁移功能。免去手工的麻烦。一步到位!

ALIST目录下建立tools文件夹,用于放置各种工具,例如jq,sed,awk等工具
代码进行大量的优化和精简,模块化的操作,可阅读性极强。
解决修复了各种出错
分以下四种情况操作。全部自动选择处理。
重新安装:文件存在,但服务都不存在,需要重装。
全新安装:文件和服务都不存在,需要全新安装。
升级安装:文件存在,服务也安装过了,需要升级。
修复安装:文件不存在,但服务也安装过了,需要修复。
关于RaiDrive无法显示盘符的问题,
原因是开机后ALIST没有启动或者是RaiDrive服务比ALIST服务先启动了,导致这样的问题。解决方案就是,弄一个启动脚本即可。这样的话,Alist以服务方式安装后会比RaiDrive优先启动,这样就不会添加NAS盘符而无故消失的问题。
net stop RaiDrive.Service
TIMEOUT /t 15 >NUL
net start RaiDrive.Service
脚本说明
  1. 自动下载最新的Alist,并且以windows服务的方式启动
  2. 自动下载最新的RaiDrive,全自动安装
  3. 自动更新Alist为最新的,每隔三天左右更新一次,添加为计划任务。
  4. 安装过程中完全自动化,无需手工,会自动显示Alist账号和密码。
  5. 安装过程中会弹出web界面进行初始化设备
  6. 会自动添加Alist的目录为环境变量,方便以后执行alist的相关命令,可以在cmd下执行alist --help查看
  7. 需要设置的是两个地方,一个alistpath就是alist安装路径
  8. 还有一个需要设置的就是alist服务名,也可以不用改,根据自己的爱好。

附上ALIST最方便好用的强大代码。批处理脚本
@echo off
SETlocal enabledelayedexpansion
::请设置好自己的路径,建议D盘
SET AppPath=D:\SoftAPP\Alist\
SET ServiceName=AlistDriveService
SET AppName=alist
SET ReposName=alist-org
SET AppFile=alist-windows-4.0-amd64.zip
SET AppUp=AlistUpgrade
SET ReleasesUrl=https://api.github.com/repos/%ReposName%/%AppName%/releases
SET RaiD=RaiDrive.Service
cd /d %AppPath%
IF NOT EXIST "tools" (md %AppPath%tools)
 
 ::如果路径不存在,则创建
IF NOT EXIST %AppPath% (md %AppPath%)
 
 ::复制本脚本到安装目录
IF NOT EXIST %AppPath%%AppUp%.bat  (copy %cd%\%AppUp%.bat %AppPath%)
 
 
 ::判断是否为第一次安装
  ::判断服务是否存在
IF EXIST %AppPath%%AppName%.exe (SET ISexist=1) ELSE (SET ISexist=0)
  ::判断文件是否存在
WMIC Service GET name|Findstr /i "%ServiceName%" >nul&&SET ISservs=1||SET ISservs=0
SET ISfirst=%ISexist%%ISservs%
 
::根据当前系统存在各种情况进行判断
IF %ISfirst%==10 GOTO ReInstall
IF %ISfirst%==00 GOTO Install
IF %ISfirst%==01 GOTO RepairInstall
IF %ISfirst%==11 GOTO Upgrade
 
:ReInstall
::10-重新安装:文件存在,但服务都不存在,需要重装。
    echo ============重新安装============
    ::调用环境初始化检查模块
    CALL :SetEnv
 
    ::调用服务安装模块
    CALL :Service
 
    ::调用Alist配置模块
    CALL :AlistWeb
 
    ::调用计划任务升级
    CALL :Taskschd
 
    goto End
 
:Install
::00-全新安装:文件和服务都不存在,需要全新安装。
    echo ============全新安装============
    ::调用环境初始化检查模块
    CALL :SetEnv
 
    ::调用旧数据迁移模块
    :Migration
 
    ::调用工具下载模块
    CALL :Tools
 
    ::调用最新版本获取模块
    CALL :Latest
 
    ::调用下载和启动服务模块
    CALL :Down
 
    ::调用服务安装模块
    CALL :Service
 
    ::调用Alist配置模块
    CALL :AlistWeb
 
    ::调用计划任务升级
    CALL :Taskschd
 
    goto End
     
 
:RepairInstall
::01-修复安装:文件不存在,但服务也安装过了,需要修复。
    echo ============全新安装============
    ::调用最新版本获取模块
    CALL :Latest
 
    ::调用下载和启动服务模块
    CALL :Down
 
    ::调用服务安装模块
    CALL :Service
 
    ::调用Alist配置模块
    CALL :AlistWeb
 
    goto End
 
:Upgrade
::11-升级安装:文件存在,服务也安装过了,需要升级。
    echo ============升级安装============
 
    ::调用最新版本获取模块
    CALL :Latest
 
    ::调用当前版本获取模块
    CALL :Current
 
    echo =====正在判断是否需要升级===
    if "%CurrentVersion%" == "%LatestVersion%" (echo %AppName%版本已经是最新的%LatestVersion%版,无需升级!) else (
      echo %AppName%的当前为%CurrentVersion%版,最新是%LatestVersion%,需要升级!
      nssm64 stop %ServiceName%>NUL 2>NUL
      echo %AppName%正在升级中,请稍等
 
      ::调用下载和启动服务模块
      CALL :Down
      TIMEOUT /t 2 >NUL
 
  )
    ::调用服务安装模块
    CALL :Service
      goto End
 
 
:SetEnv
    ::環境變量设置
    wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" set VariableValue='%path%;%AppPath%;%AppPath%tools;'>NUL 2>NUL
    rem taskkill /f /im explorer.exe & start explorer.exe >NUL 2>NUL
 
     ::检查chocolatey
     WMIC Service  GET name|Findstr /i "%ServiceName%" >nul&&echo %ServiceName% is already installed ||nssm64 install %ServiceName% %AppPath%%AppName%.exe server&TIMEOUT /t 2 >NUL
 
    ::检查chocolatey
    IF NOT EXIST "%ALLUSERSPROFILE%\chocolatey" (
     @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "[System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
    )
 
     ::安装RaiDrive 先判断系统是不事安装过了raidrive
     echo 正在安装RaiDrive网盘挂载工具
     WMIC Service  GET name|Findstr /i "%RaiD%" >nul&&echo RaiDrive is already installed ||echo A|choco install raidrive&TIMEOUT /t 2 >NUL
 
    ::检查是否已经安装过Alist,如果存在则获得Data目录迁移到新的目录
 echo 正在检查您的系统是否安装过%AppName%
 Wmic Process Get ExecutablePath | Findstr /i "%AppName%.exe" | sed64 "s/[[:space:]]*$//" | head -1 | chcase /LOWER | gawk64 -F"%AppName%.exe" "NR==1 {print $1}" >%AppName%Data.txt
 
    goto :EOF
 
:Migration
    ::数据迁移
    for /f "delims=" %%d in (%AppName%Data.txt) do (SET DataPath=%%d)
    IF EXIST "%DataPath%" (
        if "%DataPath%" == "ehco %AppPath% | chcase /LOWER" (
        echo 正检查您设置的%AppName%目录与原来的%AppName%安装路径是相同的,无需备份原来的%AppName%数据"
        ) else (
                 echo 正在统计数据文件的大小
                 IF EXIST "%AppPath%data\data.db" (
                    wc -c "%AppPath%data\data.db" | gawk64 -F" " "{print $1}">newsize.txt
                     for /f "delims=" %%n in (newsize.txt) do (SET newsize=%%n)
             )
                 IF EXIST "%DataPath%data\data.db" (
                    wc -c "%DataPath%data\data.db" | gawk64 -F" " "{print $1}">oldsize.txt
                    for /f "delims=" %%o in (oldsize.txt) do (SET oldsize=%%o)
             )
                 taskkill /f /im %AppName%*
                 if "%oldsize%" gtr "%newsize%" (
                    echo 正在迁移旧数据
                    XCOPY "%AppPath%data\" "%DataPath%data\" /e /h /y /c /r
                    )  else (echo 无需迁移)
               )
    ) else (
            echo %DataPath%不存在,您的系统没有安装过%AppName%
        )
 
    goto :EOF
 
 
:Tools
  ::下載各種組件到Alist的安裝目錄
  SET ToolList=nssm64;gawk64;head;nircmd64;nircmdc64;FVerTest;dllcall;1.6/jq64;6.00/unzip;3.0/grep;1.19.4/wget64;1.19.4/wget64;4.8/sed64;nircmdc64;chcase;zip;wc;tr
  SET BatUrl=http://bcn.bathome.net/tool
  :LoopDown
  for /f "tokens=1* delims=;" %%a in ("!ToolList!") do (
      SET ToolName=%%a.exe
      if not exist "%cd%\!ToolName!" (Curl -C - --create-dirs -O --output-dir tools %BatUrl%/!ToolName! >NUL 2>NUL)
      SET ToolList=%%b
  )
  if defined ToolList goto :LoopDown
  rem Curl -C - -O --remote-name-all "%BatUrl%/1.6/jq64.exe" "%BatUrl%/6.00/unzip.exe" "%BatUrl%/3.0/grep.exe" "%BatUrl%/1.19.4/wget64.exe" "%BatUrl%/4.8/sed64.exe"
  rem Curl -C - --create-dirs -O --output-dir tools --remote-name-all "%BatUrl%/1.6/jq64.exe" "%BatUrl%/6.00/unzip.exe" "%BatUrl%/3.0/grep.exe" "%BatUrl%/1.19.4/wget64.exe" "%BatUrl%/4.8/sed64.exe" >NUL 2>NUL
  ::
  dllcall SendMessageTimeoutA,65535,26,,"Environment",2,4444,,user32
  goto :EOF
 
 
:Service
    ::获取服务的安装状态,判断服务是否存在
    WMIC Service  GET name|Findstr /i "%ServiceName%" >nul&&echo %ServiceName% is already installed ||nssm64 install %ServiceName% %AppPath%%AppName%.exe server&TIMEOUT /t 2 >NUL
    nssm64 restart %ServiceName%>NUL 2>NUL&TIMEOUT /t 2 >NUL
    nircmd service restart %RaiD%>NUL 2>NUL&TIMEOUT /t 2 >NUL
    goto :EOF
 
:AlistWeb
    echo 恭喜成功,%AppName%的版本为&&%AppName% version | gawk64 -F": " "NR==5 {print $2}"
    echo =====您现在的账号密码如下,记得复制下来===
    %AppName%.exe admin&TIMEOUT /t 15 >NUL
    echo 开始打开ALIST界面
    start http://localhost:5244/@login
    echo =====请设置好您的ALIST,然后按任意键继续===
    pause
    goto :EOF
 
:Latest
    ::获取云上最新版本
    curl -sL !ReleasesUrl! | jq64 -r ".[0].name" >LatestVersion.txt
     ::设置最新版本信息为变量LatestVersion
    for /f "delims=" %%a in (LatestVersion.txt) do (
      SET LatestVersion=%%a
    )
    goto :EOF
 
:Current
     ::获取本地版本信息
    %AppName% version | gawk64 -F": " "NR==5 {print $2}" >CurrentVersion.txt
     ::设置版本信息为变量CurrentVersion
    for /f "delims=" %%b in (CurrentVersion.txt) do (
      SET CurrentVersion=%%b
    )
    goto :EOF
 
:Down
    ::获取下载地址
    curl -fsSL !ReleasesUrl! | jq64 -r ".[0].assets[].browser_download_url" | grep -e "%AppFile%">down.txt
    for /f "delims=" %%d in (down.txt) do (SET AppUrl=https://ghproxy.com/%%d)
 
    ::下载安装
    echo 正在下载中......
    curl -C - -O !AppUrl!
    ECHO Y|unzip -o -d %AppPath% %AppFile% >NUL 2>NUL
    goto :EOF
 
:Taskschd
    echo 正在添加计划任务,自动更新Alist
    SET var=0
    ::读取任务计划中的%AppUp%任务,如果有就显示,如果没有就报错
    schtasks /query /tn %AppUp% |findstr /m "%AppUp%" >NUL 2>NUL&&SET var=1  
    ::检查上一条指令是否产生与ABC有关的信息,如果没有就执行X;如过有就执行Y
    if ERRORLEVEL 1 (schtasks /create /ru system /tn "%AppUp%" /tr %AppPath%%AppUp%.bat /ST 21:30 /sc weekly /mo 1 /d FRI&&echo 添加升级任务成功)else (echo 升级任务已经存在)
    TIMEOUT /t 2 >NUL
    net start %RaiD% >NUL 2>NUL
 
    goto :EOF
 
:End
::设置RaiDrive的启动方式设置为自动延迟启动,避免Alist还没启动。Raidrive先启动导致网盘重启后无法挂载的问题。
sc config "%RaiD%" start=delayed-auto
 
::开启防火墙
choice /t 3 /d y /n >nul
net start MpsSvc>NUL 2>NUL
sc config MpsSvc start=auto >NUL 2>NUL
Netsh Advfirewall Set Allprofiles State ON>NUL 2>NUL
Set BlockName=msedgewebview2
 
:获取msedgewebview2进程的路径
Wmic Process Get ExecutablePath |Findstr "%BlockName%.exe" | sed64 "s/[[:space:]]*$//" |head -1 >BlockPath.txt
for /f "delims=" %%f in (BlockPath.txt) do (
  Netsh Advfirewall Firewall show rule "%BlockName%">nul&&echo "已经屏蔽过RaiDrive的广告了,请放心使用吧!"||Netsh Advfirewall Firewall Add Rule Name="%BlockName%" Dir=out Action=block Program="%%f" Enable=yes>nul&&echo "已经成功屏蔽RaiDrive的广告,欢迎回到纯净美好的世界!"
  )
 
:获取RaiDrive进程的路径
Wmic Process Get ExecutablePath |Findstr "RaiDrive.exe" | sed64 "s/[[:space:]]*$//" |head -1 >RaiDrive.txt
 
:關閉相應的服務
net stop RaiDrive.Service
echo 正在重启RaiDrive挂载服务
taskkill /f /im msedgewebview* >NUL 2>NUL
taskkill /f /im RaiDrive*>NUL 2>NUL
net start RaiDrive.Service
 
:重新咝蠷aiDrive
echo 正在重新咝蠷aiDrive
for /f "delims=" %%r in (RaiDrive.txt) do nircmd64 exec show "%%r" 
DEL /s /q CurrentVersion.txt down.txt LatestVersion.txt BlockPath.txt RaiDrive.txt newsize.txt oldsize.txt %AppName%Data.txt>NUL 2>NUL
::CLS&ECHO.&
ECHO 完成! &TIMEOUT /t 10 >NUL








音频播放效果

RAIDRIVE的设置

已经修复闪退的问题,并且自动将设置RaiDrive的启动方式设置为自动延迟启动,避免Alist还没启动。Raidrive先启动导致网盘重启后无法挂载的问题。
AlistUpgrade.zip
750278bbff7434b697f9303583e77bb2.zip (3.88 KB)
卓越飞翔博客
上一篇: js pc版自动跳转到手机版
下一篇: 腾讯视频怎么获取vip cookie
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏