找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20470|回复: 8

[文件操作] 批处理安装pcl2自定义主页文件的安装器。运行不正常。

[复制链接]
发表于 2023-7-27 15:55:35 | 显示全部楼层 |阅读模式
我制作了一个如题的东西。首先它会搜索一个叫“Plain Craft Launcher 2.exe”的文件,然后把它所在的目录(去掉文件本身的文件名)赋值给%FIV%。
然后还要把和这个批处理在同一文件夹下的一个叫symenu.ldt的文件里面内容提取出来,把里面所有的[helpfill]都替换成%FIV%的内容,然后再把替换完的内容写入到%FIV%\PCL\Custom.xaml这个文件里。
然后还要把和批处理在同文件夹下的一个叫做“help”的文件夹复制到%FIV%这个目录下面。
按照这些,我做了一个批处理,但是运行不正常:首先,这个批处理同文件夹下出现了一个文件夹叫“2”,里面装着一个空的叫“Help”的文件夹。%FIV%的上级目录下出现了一个叫“PCL”的空文件夹。运行时还出现了几个提示说“语法错误“,同时最后的提示安装总用时,显示为00:00:00.00
代码如下:
  1. @echo off
  2. color f0
  3. title SY Setup
  4. setlocal EnableDelayedExpansion
  5. echo 警告:安装程序为测试版,可能存在bug,如无法正常使用请练习@LTSC1809。
  6. echo 建议备份源文件,以防出现可能出现的潜在bug导致的文件丢失
  7. echo.
  8. pause
  9. cls
  10. echo SY的自定义主页 安装程序(DEV1
  11. echo 正在搜索PCL启动器文件夹...
  12. set "tt=%time%"
  13. set "tn=%time%"
  14. set "FileName=Plain Craft Launcher 2.exe"
  15. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  16. if exist %%a:\ (
  17. for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
  18. if /i "%%~nxb" equ "%FileName%" (
  19. set a=1
  20. set "FIV=%%~dpb"
  21. )
  22. )
  23. )
  24. )
  25. if not defined a (echo 未找到文件,请确认你已经安装了PCL启动器。
  26. pause
  27. exit)
  28. set "t1n=%time%"
  29. if "%t1n:~,2%" lss "%tn:~,2%" set "add=+24"
  30. set /a "timesn=(%t1n:~,2%-%tn:~,2%%add%)*360000+(1%t1n:~3,2%%%100-1%tn:~3,2%%%100)*6000+(1%t1n:~6,2%%%100-1%tn:~6,2%%%100)*100+(1%t1n:~-2%%%100-1%tn:~-2%%%100)" ,"ssn=(timesn/100)%%60","mmn=(timesn/6000)%%60","hhn=timesn/360000","msn=timesn%%100"
  31. echo 找到文件夹:%FIV% 用时:%hhn%:%mmn%:%ssn%.%msn%(时:分:秒.毫秒)
  32. echo 正在删除现有的自定义主页文件...
  33. del /f /s /q "%FIV%\PCL\Custom.xaml"
  34. echo 正在写入...
  35. set "t=%time%"
  36. for /f "usebackq delims=" %%i in ("%cd%\symenu.ldt") do (set str=%%i
  37. set str=!str:[helpfill]=%FIV%!
  38. echo !str!>>"%FIV%\PCL\Custom.xaml")
  39. set "t1=%time%"
  40. if "%t1:~,2%" lss "%t:~,2%" set "add=+24"
  41. set /a "times=(%t1:~,2%-%t:~,2%%add%)*360000+(1%t1:~3,2%%%100-1%t:~3,2%%%100)*6000+(1%t1:~6,2%%%100-1%t:~6,2%%%100)*100+(1%t1:~-2%%%100-1%t:~-2%%%100)" ,"ss=(times/100)%%60","mm=(times/6000)%%60","hh=times/360000","ms=times%%100"
  42. echo 写入完成!用时:%hh%:%mm%:%ss%.%ms%(时:分:秒.毫秒)
  43. echo 正在复制Help文件夹...
  44. set "tx=%time%"
  45. echo ·删除原有Help文件夹
  46. rmdir /s /q %FIV%\Help
  47. echo ·建立新Help文件夹
  48. md %FIV%\Help
  49. echo ·复制文件
  50. copy %cd%\Help %FIV%\Help
  51. set "t1x=%time%"
  52. if "%t1x:~,2%" lss "%tx:~,2%" set "add=+24"
  53. set /a "timesx=(%t1x:~,2%-%tx:~,2%%add%)*360000+(1%t1x:~3,2%%%100-1%tx:~3,2%%%100)*6000+(1%t1x:~6,2%%%100-1%tx:~6,2%%%100)*100+(1%t1x:~-2%%%100-1%tx:~-2%%%100)" ,"ssx=(timesx/100)%%60","mmx=(timesx/6000)%%60","hhx=timesx/360000","msx=timesx%%100"
  54. set "t1t=%time%"
  55. if "%t1t:~,2%" lss "%tt:~,2%" set "add=+24"
  56. set /a "timest=(%t1t:~,2%-%tt:~,2%%add%)*360000+(1%t1t:~3,2%%%100-1%tt:~3,2%%%100)*6000+(1%t1t:~6,2%%%100-1%tt:~6,2%%%100)*100+(1%t1t:~-2%%%100-1%tt:~-2%%%100)" ,"ssn=(timest/100)%%60","mmn=(timest/6000)%%60","hht=timesn/360000","mst=timesn%%100"
  57. echo 用时:%hhx%:%mmx%:%ssx%.%msx%(时:分:秒.毫秒)
  58. echo 这部分工作已经圆满完成
  59. echo 安装总用时:用时:%hht%:%mmt%:%sst%.%mst%(时:分:秒.毫秒)
  60. echo 安装已结束,请打开pcl启动器检查。
  61. echo 按任意键退出
  62. pause>nul
  63. exit
复制代码
发表于 2023-7-27 16:18:50 | 显示全部楼层
我觉得你可以发到苦力怕论坛云云的地方
 楼主| 发表于 2023-7-27 16:25:13 | 显示全部楼层
回复 2# jyswjjgdwtdtj


    这里事专门讨论bat的地方...苦力怕论坛不是讨论这种的地方吧。
发表于 2023-7-27 16:44:49 | 显示全部楼层
回复 1# LTSC1809
  1. echo ·删除原有Help文件夹
  2. rd /s /q "%FIV%\Help"
  3. echo ·建立新Help文件夹
  4. md "%FIV%\Help"
  5. echo ·复制文件
  6. xcopy /e /y "%cd%\Help" "%FIV%\Help"
复制代码

评分

参与人数 1技术 +1 收起 理由
LTSC1809 + 1 感谢回复

查看全部评分

 楼主| 发表于 2023-7-27 17:29:48 | 显示全部楼层
本帖最后由 LTSC1809 于 2023-7-27 17:39 编辑

回复 4# Batcher


    感谢回答,现在不出错了,但是我发现一个问题,就是原文本和处理后保存的文本不一样。中间的空行都消失了(没空行不影响正常使用,这个可以不解决) 而且还有个叹号莫名消失了,为什么会这样?那个叹号消失的地方,就是:原文件是:
<!--
但是处理完的文件变成了
<--
叹号没了,怎么办
发表于 2023-7-27 18:08:12 | 显示全部楼层
 楼主| 发表于 2023-7-27 19:09:15 | 显示全部楼层
回复 6# Batcher


    看了一眼,意思就是开了变量延迟,就会无法输出叹号,那我不用变量延迟不就行了
发表于 2023-7-27 21:10:47 | 显示全部楼层
  1. @echo off
  2. set "FileName=Plain Craft Launcher 2.exe"

  3. set time1=%time%
  4. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  5.         if exist %%a:\ (
  6.                 for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\%FileName%" 2^>nul') do (
  7.                         set "FIV=%%~dpb"
  8.                 )
  9.         )
  10. )
  11. if not defined FIV (
  12.         echo 未找到文件,请确认你已经安装了PCL启动器。
  13.         pause
  14.         exit
  15. )

  16. set time2=%time%
  17. call :getTime "%time1%" "%time2%" "找到文件夹:%FIV%"

  18. (for /f "usebackq delims=" %%i in ("symenu.ldt") do (
  19.         set "str=%%i"
  20.         setlocal enabledelayedexpansion
  21.         set "str=!str:[helpfill]=%FIV%!"
  22.         echo=!str!
  23.         endlocal
  24. ))>"%FIV%\PCL\Custom.xaml"

  25. set time3=%time%
  26. call :getTime "%time2%" "%time3%"

  27. rd /s /q "%FIV%\Help"
  28. robocopy "Help" "%FIV%Help" /e

  29. set time4=%time%
  30. call :getTime "%time3%" "%time4%"
  31. call :getTime "%time1%" "%time4%"

  32. echo 按任意键退出
  33. pause>nul
  34. exit

  35.         :getTime
  36.         set "t=%~1"
  37.         set "t1=%~2"
  38.         if "%t1:~,2%" lss "%t:~,2%" set "add=+24"
  39.         set /a "times=(%t1:~,2%-%t:~,2%%add%)*360000+(1%t1:~3,2%%%100-1%t:~3,2%%%100)*6000+(1%t1:~6,2%%%100-1%t:~6,2%%%100)*100+(1%t1:~-2%%%100-1%t:~-2%%%100)"
  40.         echo %~3 检索时间 %times% ms
  41.         exit /b
复制代码
发表于 2023-7-28 08:46:52 | 显示全部楼层
回复 7# LTSC1809


那我不用变量延迟不就行了

请亲自试试行还是不行,不能想当然。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 14:32 , Processed in 0.020210 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表