标题: [文件操作] 批处理安装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
代码如下:- @echo off
- color f0
- title SY Setup
- setlocal EnableDelayedExpansion
- echo 警告:安装程序为测试版,可能存在bug,如无法正常使用请练习@LTSC1809。
- echo 建议备份源文件,以防出现可能出现的潜在bug导致的文件丢失
- echo.
- pause
- cls
- echo SY的自定义主页 安装程序(DEV1
- echo 正在搜索PCL启动器文件夹...
- set "tt=%time%"
- set "tn=%time%"
- set "FileName=Plain Craft Launcher 2.exe"
- 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 (
- if exist %%a:\ (
- for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
- if /i "%%~nxb" equ "%FileName%" (
- set a=1
- set "FIV=%%~dpb"
- )
- )
- )
- )
- if not defined a (echo 未找到文件,请确认你已经安装了PCL启动器。
- pause
- exit)
- set "t1n=%time%"
- if "%t1n:~,2%" lss "%tn:~,2%" set "add=+24"
- 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"
- echo 找到文件夹:%FIV% 用时:%hhn%:%mmn%:%ssn%.%msn%(时:分:秒.毫秒)
- echo 正在删除现有的自定义主页文件...
- del /f /s /q "%FIV%\PCL\Custom.xaml"
- echo 正在写入...
- set "t=%time%"
- for /f "usebackq delims=" %%i in ("%cd%\symenu.ldt") do (set str=%%i
- set str=!str:[helpfill]=%FIV%!
- echo !str!>>"%FIV%\PCL\Custom.xaml")
- set "t1=%time%"
- if "%t1:~,2%" lss "%t:~,2%" set "add=+24"
- 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"
- echo 写入完成!用时:%hh%:%mm%:%ss%.%ms%(时:分:秒.毫秒)
- echo 正在复制Help文件夹...
- set "tx=%time%"
- echo ·删除原有Help文件夹
- rmdir /s /q %FIV%\Help
- echo ·建立新Help文件夹
- md %FIV%\Help
- echo ·复制文件
- copy %cd%\Help %FIV%\Help
- set "t1x=%time%"
- if "%t1x:~,2%" lss "%tx:~,2%" set "add=+24"
- 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"
- set "t1t=%time%"
- if "%t1t:~,2%" lss "%tt:~,2%" set "add=+24"
- 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"
- echo 用时:%hhx%:%mmx%:%ssx%.%msx%(时:分:秒.毫秒)
- echo 这部分工作已经圆满完成
- echo 安装总用时:用时:%hht%:%mmt%:%sst%.%mst%(时:分:秒.毫秒)
- echo 安装已结束,请打开pcl启动器检查。
- echo 按任意键退出
- pause>nul
- exit
复制代码
作者: jyswjjgdwtdtj 时间: 2023-7-27 16:18
我觉得你可以发到苦力怕论坛云云的地方
作者: LTSC1809 时间: 2023-7-27 16:25
回复 2# jyswjjgdwtdtj
这里事专门讨论bat的地方...苦力怕论坛不是讨论这种的地方吧。
作者: Batcher 时间: 2023-7-27 16:44
回复 1# LTSC1809 - echo ·删除原有Help文件夹
- rd /s /q "%FIV%\Help"
- echo ·建立新Help文件夹
- md "%FIV%\Help"
- echo ·复制文件
- 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
- @echo off
- set "FileName=Plain Craft Launcher 2.exe"
-
- set time1=%time%
- 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 (
- if exist %%a:\ (
- for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\%FileName%" 2^>nul') do (
- set "FIV=%%~dpb"
- )
- )
- )
- if not defined FIV (
- echo 未找到文件,请确认你已经安装了PCL启动器。
- pause
- exit
- )
-
- set time2=%time%
- call :getTime "%time1%" "%time2%" "找到文件夹:%FIV%"
-
- (for /f "usebackq delims=" %%i in ("symenu.ldt") do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set "str=!str:[helpfill]=%FIV%!"
- echo=!str!
- endlocal
- ))>"%FIV%\PCL\Custom.xaml"
-
- set time3=%time%
- call :getTime "%time2%" "%time3%"
-
- rd /s /q "%FIV%\Help"
- robocopy "Help" "%FIV%Help" /e
-
- set time4=%time%
- call :getTime "%time3%" "%time4%"
- call :getTime "%time1%" "%time4%"
-
- echo 按任意键退出
- pause>nul
- exit
-
- :getTime
- set "t=%~1"
- set "t1=%~2"
- if "%t1:~,2%" lss "%t:~,2%" set "add=+24"
- 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)"
- echo %~3 检索时间 %times% ms
- exit /b
复制代码
作者: Batcher 时间: 2023-7-28 08:46
回复 7# LTSC1809
请亲自试试行还是不行,不能想当然。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |