无忧启动论坛

标题: 抛个砖头--PrimoCache批处理自动设置 [打印本页]

作者: 9zhmke    时间: 2024-2-21 09:54
标题: 抛个砖头--PrimoCache批处理自动设置
本帖最后由 9zhmke 于 2024-6-19 16:00 编辑

在勤奋的狐狸波贴子里提到PrimoCache命令行配置(http://bbs.wuyou.net/forum.php?mod=viewthread&tid=434147
刚好在之前也有批处理设置的想法,于是在fulibo的指引下越滑越远......
最先想到的就是按照自己的机器配置写个简单批处理:

  1.     cd /d "C:\Program Files\PrimoCache"
  2.     set disk=没找到盘
  3.     for /f "tokens=2" %%i in ('rxpcc ls^|find "Vol"^|find "Level-2"') do set disk=%%i
  4.     for /f "tokens=4" %%i in ('rxpcc ls^|find "%disk%"') do set disk=%%i
  5.     echo 二级缓存是%disk%--{A340EFBD-5A9F-444A-B642-A42B5A9CD496}

  6.     rxpcc new -v d -m 4096 -l %disk% -r 255,3 -w 20 -a average,freewritten,flushsleep,flushtoL2 -p=fromL2 -s
  7.     rem D盘,内存4G,二级缓存3%写入,缓存时间20秒,均衡模式,待机刷入缓存,L1满时转L2,-p优先取L2,-s静默
  8.     rxpcc new -v c -m 4096 -w INF -a average,freewritten,flushsleep -p=boot -s
  9.     rem C盘,内存4G,缓存时间无限,均衡模式,待机刷入缓存,-p启动时开始,优先取L2,-s静默
复制代码


我和我推荐给周围朋友的配置,都是固态+机械。固态用于启动+二缓,通常128-512G,机械用于存储数据,通常0.5-18T。
    大机械硬盘性价比高,很多家庭都有小孩从小到大的照片视频,收藏的歌曲视频电影、必备的软件什么的机械盘万一
    有误操作,数据可恢复,固态就呵呵了。
配置不是重点,大家也不必拿这些考虑做讨论,主要想讨论的,是怎么配置PrimoCache更合理,以及简化配置的方法。诚
    心地说,用各种语言和脚本,就没有比批处理更差的了,效率低不说,还容易出错。但是,批处理的即改即用和不要
    求环境仍然使其生存了下来。本次探讨是以批处理为基础的命令行PrimoCache配置。由于自身经常下载各大论坛新出
    的操作系统安装到自用实体机测试,重装系统太频繁,只好大量使用绿色软件,连最常用的静默安装软件们也要弄个
    批处理方式来安装。PrimoCache是我的必装软件之一,每次手动设置时都在想要花点时间弄个自动设置方法出来。
后来发现,在帮同事装机时还得按不同的环境用不同的参数,于是写了个自动设置版初稿

以下批处理在Win10x64中文版下调试,不确定能英文版或磁盘没有卷标的电脑上正确运行,仅做技术讨论,
内有删除分区的操作,数据重要的电脑请务必谨慎,数据掉了我也没办法负责任。
希望有探讨的同学共同完善



  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo 还要多测试,比如卷标为空时,取分区空间位置是否正确等
  4. rem ..................检测机械和固态硬盘的数量..................
  5. set HDD_NUM=0&for /f %%i in ('powershell Get-PhysicalDisk^|find "HDD"') do set HDD=%%i && set /a HDD_NUM=!HDD_NUM! + 1
  6. set SSD_NUM=0&for /f %%i in ('powershell Get-PhysicalDisk^|find "SSD"') do set SSD=%%i && set /a SSD_NUM=!SSD_NUM! + 1
  7. if  %SSD_NUM% gtr 1 echo 多于一只固态,请手动设置PrimoCache.& goto END
  8. rem ..................检测内存大小..................
  9. for /f "tokens=2*" %%i in ('systeminfo^|find "物理内存总量"') do set memory=%%i %%j
  10. if not "%memory:~-2%"=="MB" set msg3=内存大小超出认知,程序无法正确判断应该怎么设缓存.
  11. rem 去除最后两位,去除中间的逗号
  12. set memory=%memory:~0,-2%
  13. set /a memory=%memory:,=% /1000
  14. if %memory% lss 8 echo 内存太小,还是不使用缓存程序好些.& goto END
  15. if %memory% lss 16 if %memory% gtr 15 set mem=4096
  16. if %memory% lss 13 set mem=2048
  17. if %memory% gtr 15 set mem=4096
  18. echo 内存%memory%G,应设置缓存为%mem%。机械硬盘%HDD_NUM%只位于硬盘排序%HDD%,固态硬盘%SSD_NUM%只位于硬盘排序%SSD%。
  19. rem ..................检测PrimoCache程序..................
  20. cd /d "C:\Program Files\PrimoCache"
  21. if not exist rxpcc.exe echo 没有找到PrimoCache,现在退出.& goto END
  22. rem ..................检测机械和固态硬盘的分区..................

  23. :SSD_All_Drv
  24. if not %SSD_NUM%==1 goto SSD_NUM_END
  25. (        echo.select disk %SSD%
  26.         echo.detail disk
  27. )|diskpart|find "磁盘分区">%tmp%\diskpart.txt
  28. set SSD_All_Drv=
  29. for /f "tokens=3*" %%i in (%tmp%\diskpart.txt) do (
  30.         call :str_len "%%i"
  31.         if "!str_len!"=="1" set SSD_All_Drv=!SSD_All_Drv!%%i
  32.         rem echo i=%%i,len=!str_len!,SSD_All_Drv=!SSD_All_Drv!
  33.         )
  34. echo 固态硬盘分区驱动器号是:%SSD_All_Drv%
  35. :SSD_NUM_END
  36. :HDD_All_Drv
  37. if not %HDD_NUM%==1 goto HDD_NUM_END
  38. (        echo.select disk %HDD%
  39.         echo.detail disk
  40. )|diskpart|find "磁盘分区">%tmp%\diskpart.txt
  41. set HDD_All_Drv=
  42. for /f "tokens=3*" %%i in (%tmp%\diskpart.txt) do (
  43.         call :str_len "%%i"
  44.         if "!str_len!"=="1" set HDD_All_Drv=!HDD_All_Drv!%%i
  45.         rem echo i=%%i,len=!str_len!,HDD_All_Drv=!HDD_All_Drv!
  46.         )
  47. echo 机械硬盘分区驱动器号是:%HDD_All_Drv%
  48. :HDD_NUM_END
  49. set /a All_Drv_num=%SSD_NUM% + %HDD_NUM%
  50. set All_Drv=%SSD_NUM%%HDD_NUM%
  51. echo 所有硬盘分区驱动器号是:%All_Drv%
  52. rem ..................检测引导磁盘..................
  53. for /f "tokens=2" %%i in ('echo list vol ^|diskpart^|find "启动"') do set boot_vol=%%i
  54. (        echo.select vol %boot_vol%
  55.         echo.list disk
  56. )|diskpart|find "*">%tmp%\diskpart.txt
  57. for /f "tokens=3,4" %%i in (%tmp%\diskpart.txt) do if "%%j"=="联机" set boot_disk=%%i
  58. echo 硬盘卷%boot_vol%作为启动盘,属于硬盘%boot_disk%
  59. if %All_Drv_num%==1 goto ONE_HDD
  60. if %SSD_NUM%==1 if %HDD_NUM% gtr 0 goto ONE_SSD_HDD
  61. echo 固态硬盘%SSD_NUM%只,机械硬盘%HDD_NUM%只,不知道怎么配置才好,请手工处理...
  62. goto END
  63. :ONE_HDD
  64. rem ..................单硬盘模式..................
  65. if not %All_Drv_num%==1 goto ONE_HDD_END
  66. rxpcc new -v %All_Drv% -m %mem% -w INF -a average,freewritten,flushsleep -p=boot -s
  67. echo %All_Drv%盘,内存%mem%,缓存时间无限,均衡模式,待机刷入缓存,-p启动时开始,优先取L2,-s静默
  68. echo 设置完成
  69. :ONE_HDD_END
  70. goto END
  71. :ONE_SSD_HDD
  72. rem ..................硬盘:一固态一机械或多机械..................
  73. (        echo.select disk %SSD%
  74.         echo.detail disk
  75. )|diskpart|find "磁盘分区">%tmp%\diskpart.txt
  76. set size=0
  77. for /f "tokens=2,4,5" %%i in (%tmp%\diskpart.txt) do if "%%k"=="GB" set part=%%i && set size=%%j
  78. del %tmp%\diskpart.txt
  79. echo 第1次找出第%part%分区空间为%size%
  80. if not "%size%"=="0" goto SIZE_NEXT
  81. (        echo.select disk %SSD%
  82.         echo.list partition
  83. )|diskpart|find "RAW">%tmp%\diskpart.txt
  84. set size=0
  85. for /f "tokens=2,4,5" %%i in (%tmp%\diskpart.txt) do if "%%k"=="GB" set part=%%i && set size=%%j
  86. del %tmp%\diskpart.txt
  87. echo 第2次找出第%part%分区空间为%size%
  88. if not "%size%"=="0" goto SIZE_NEXT
  89. (        echo.select disk %SSD%
  90.         echo.list partition
  91. )|diskpart|find "分区">%tmp%\diskpart.txt
  92. for /f "tokens=2,4,5" %%i in (%tmp%\diskpart.txt) do if "%%k"=="GB" set part=%%i && set size=%%j
  93. echo 第3次找出第%part%分区空间为%size%
  94. :SIZE_NEXT
  95. set /a size=%size% + 0
  96. if %size% gtr 200 echo SSD二级缓不对,是%size%GB&goto END
  97. if %size% lss 2   echo SSD二级缓不对,是%size%GB&goto END
  98. echo 上面过程已找到未知分区(二级缓存)空间,这个空间按约定,由第一次使用时手工建立在磁盘空间最末尾

  99. echo ..................找到固态硬盘是第%SSD%只,二级缓存是其%part%分区%size%GB,下面删除未识别卷后新建..................
  100. (        echo.select disk %SSD%
  101.         echo.select partition %part%
  102.         echo.delete part
  103.         echo.creat part primary
  104.         echo.list partition
  105. )|diskpart
  106. echo ..................找最大的卷号,并格式化成二级缓存..................
  107. set max_vol=0
  108. for /f "tokens=2" %%i in ('rxpcc ls^|find "Local Volume"') do (
  109.         set num=%%i
  110.         set num=!num:~1,2!
  111.         if !num! lss 0 set num=0
  112.         if !num! gtr 66 set num=0
  113.         if !num! gtr !max_vol! set max_vol=!num!
  114.         rem echo 原始数据“%%i”,NUM=!num!,MAX=!max_vol!
  115.         )
  116. echo 最大的卷号是!max_vol!
  117. if "!max_vol!"=="0" goto echo 二级卷没找到,最大的卷号%max_vol%...goto END
  118. rxpcc storage format -v %max_vol% -s
  119. echo ..................找二级缓存盘,并正式建立缓存..................

  120. set disk=没找到盘
  121. for /f "tokens=2" %%i in ('rxpcc ls^|find "Vol"^|find "Level-2"') do set disk=%%i&set free=%j
  122. set free=%free:~0,-2%
  123. for /f "tokens=4" %%i in ('rxpcc ls^|find "%disk%"') do set disk=%%i
  124. echo 硬盘%SSD%是%size%G大小,二级缓存是%disk%--类似{A340EFBD-5A9F-444A-B642-A42B5A9CD496}
  125. if "%disk%"=="没找到盘" echo 没有找到固态硬盘上的二级缓存盘,也没有找到足够剩余空间,请手工建立...&goto END
  126. echo CREAT:rxpcc new -v %HDD_All_Drv% -m %mem% -l %disk% -r 255,3 -w 20 -a average,freewritten,flushsleep,flushtoL2 -p=fromL2 -s
  127. rxpcc new -v %HDD_All_Drv% -m %mem% -l %disk% -r 255,3 -w 20 -a average,freewritten,flushsleep,flushtoL2 -p=fromL2 -s
  128. echo 参数解释%HDD_All_Drv%盘,内存4G,二级缓存3%写入,缓存时间20秒,均衡模式,待机刷入缓存,L1满时转L2,-p优先取L2,-s静默
  129. echo.
  130. echo 准备建立:rxpcc new -v %HDD_All_Drv% -m %mem% -w INF -a average,freewritten,flushsleep -p=boot -s
  131. rxpcc new -v %SSD_All_Drv% -m %mem% -w INF -a average,freewritten,flushsleep -p=boot -s
  132. echo %SSD_All_Drv%盘,内存4G,缓存时间无限,均衡模式,待机刷入缓存,-p启动时开始,优先取L2,-s静默
  133. goto END

  134. rem ..................字符串长度检测子函数..................
  135. :str_len
  136.         set "str_len_string=%~1"
  137.         rem echo 接收到%str_len_string%
  138.         set str_len=0
  139.         :str_len_loop
  140.         set str_len_string=%str_len_string:~0,-1%
  141.         set /a str_len+=1
  142.         if not "%str_len_string%"==""  (goto str_len_loop)
  143.         rem echo 字符串长度为: %str_len%  
  144.         exit /b  

  145. :END
  146. echo del /f /q "%~dpnx0"
  147. echo y|del /f /q "%~dpnx0"
  148. echo 按任意键退出
  149. timeout 12



复制代码



作者: chibuzhu    时间: 2024-2-21 10:03
感谢分享
作者: temptemp    时间: 2024-2-21 10:18
通用版不太好搞,毕竟硬件不同,给自己设备做个还是挺好,一键设置
作者: yyz2191958    时间: 2024-2-21 10:22
谢谢分享
作者: c5215016    时间: 2024-2-21 11:09
谢谢
作者: yzw92    时间: 2024-2-21 11:10
谢楼主分享
作者: promrhxq    时间: 2024-2-21 11:35
批处理确实高效   不过也确实考验耐心和技术
作者: d9o    时间: 2024-2-21 12:22
谢谢干货
作者: wang1126    时间: 2024-2-21 13:12
谢谢楼主分享
作者: denslin    时间: 2024-2-21 13:29
谢谢分享
作者: sulong    时间: 2024-2-21 13:35
谢谢分享,研究一下楼主的各项设置
作者: tilltotell007    时间: 2024-2-21 13:38
谢谢楼主分享好东西
作者: guong    时间: 2024-2-21 13:48
感谢楼主分享
作者: jctsky    时间: 2024-2-21 13:57
我用的是UltraRAMDisk,设置简单
作者: yc2428    时间: 2024-2-21 15:04
谢谢分享。
作者: chairmansu    时间: 2024-2-21 17:23
感谢分享
作者: fybhwsx    时间: 2024-2-22 16:01
感谢分享,有没有Primo Ramdisk的命令安装和配置呢。
作者: qiwuqi    时间: 2024-2-22 16:09
感谢分享。。。。。
作者: sczxchen    时间: 2024-2-22 16:17

作者: Climbing    时间: 2024-2-23 11:20
PrimoCache在win10之前对系统的加速很明显,尤其是对机械硬盘,但win10之后就不是很明显了。虽然我现在还是必装这个软件,但基本上就指定1G-2G内存当缓存就完了。
作者: 9zhmke    时间: 2024-2-23 13:27
fybhwsx 发表于 2024-2-22 16:01
感谢分享,有没有Primo Ramdisk的命令安装和配置呢。

命令行可以直接用问号来查询功能
作者: 9zhmke    时间: 2024-2-23 13:29
Climbing 发表于 2024-2-23 11:20
PrimoCache在win10之前对系统的加速很明显,尤其是对机械硬盘,但win10之后就不是很明显了。虽然我现在还是 ...

我的机械D盘16T,本身就慢,我自己也是一段时间弄这个一段时间弄那个的,如果不对常用部分缓存的话,就太慢了。配了32G内存,弄了4G来缓存D盘,然后把固态分了一部分二缓给D盘
作者: zhenghui    时间: 2024-2-23 14:19
感谢分享、学习一下
作者: IT小森    时间: 2024-2-23 14:38
感谢分享
作者: 2267981144    时间: 2024-2-23 18:55
多谢热心提供分享!
作者: dayeye    时间: 2024-2-27 17:09
学习
作者: hehuiying    时间: 2024-4-12 11:26
谢谢分享
作者: 无犹启动    时间: 2024-4-26 17:21
谢谢分享
作者: 2010lzh052    时间: 2024-9-8 11:55
谢谢楼主大度分享经验,祝楼主健康快乐每一天




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3