Board logo

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

作者: LTSC1809    时间: 2023-7-27 15:55     标题: 批处理安装pcl2自定义主页文件的安装器。运行不正常。

我制作了一个如题的东西。首先它会搜索一个叫“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
复制代码

作者: jyswjjgdwtdtj    时间: 2023-7-27 16:18

我觉得你可以发到苦力怕论坛云云的地方
作者: LTSC1809    时间: 2023-7-27 16:25

回复 2# jyswjjgdwtdtj


    这里事专门讨论bat的地方...苦力怕论坛不是讨论这种的地方吧。
作者: Batcher    时间: 2023-7-27 16:44

回复 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"
复制代码

作者: LTSC1809    时间: 2023-7-27 17:29

本帖最后由 LTSC1809 于 2023-7-27 17:39 编辑

回复 4# Batcher


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

回复 5# LTSC1809


参考:
http://bbs.bathome.net/thread-60623-1-1.html#pid271633
http://bbs.bathome.net/thread-4580-1-1.html
作者: LTSC1809    时间: 2023-7-27 19:09

回复 6# Batcher


    看了一眼,意思就是开了变量延迟,就会无法输出叹号,那我不用变量延迟不就行了
作者: 77七    时间: 2023-7-27 21:10

  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
复制代码

作者: Batcher    时间: 2023-7-28 08:46

回复 7# LTSC1809


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

请亲自试试行还是不行,不能想当然。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2