标题: [文本处理] 批处理如何检测文本内容并将其改写入另一个文件内? [打印本页]
作者: FinDream 时间: 2021-2-6 10:31 标题: 批处理如何检测文本内容并将其改写入另一个文件内?
就是我想要在Minecraft服务器中实现玩家在游戏内聊天中输入某个格式的字符,批处理就根据这个字符切换当前地图和材质包并重启
而我想的就是可以在服务器核心(java语言)的启动批处理中,加入一些语句,可以从当前目录下的logs文件夹中的latest.txt文件中查找某种格式的字符(比如shadow.changemap这样子的?能够识别就好),然后将识别到的(shadow.changemap前的shadow)文字写入当前目录下的server.properties(可以用txt打开)文件中的level-name=之后和server.properties中的resourcepack=https:网盘地址/resource.zip中的.zip之前的文本(resource改为shadow),并执行stop(这个stop是Minecraft服务器核心的stop,原本的bat文件是有自动重启,所以stop了之后会自动重启)(如果能执行say mapchangecomplete就更好了)
自己研究了很久没搞好....所以来这里求助啦~~谢谢啦~~
————————
哦对,两个写入的操作都是修改
作者: FinDream 时间: 2021-2-6 10:36
回复 1# FinDream
以及如果说能附带上某些教程的链接就更好了....想系统的学一下www
作者: went 时间: 2021-2-6 14:06
直接把信息追加到server.properties文本末尾- @echo off & cd /d "%~dp0"
- set "foot=.changemap"
- if not exist "logs\latest.txt" goto :exit
- for /f "delims=." %%i in ('findstr /i "%foot%" "logs\latest.txt"') do (
- echo level-name=%%i
- echo resourcepack=https:网盘地址/%%i.zip
- (
- echo level-name=%%i
- echo resourcepack=https:网盘地址/%%i.zip
- ) >> "server.properties"
- )
- start "" "stop.bat"
- echo say mapchangecomplete!
- :exit
- pause&exit
复制代码
作者: FinDream 时间: 2021-2-6 14:34
回复 3# went
太感谢了!我这就去试试
作者: FinDream 时间: 2021-2-6 15:40
回复 3# went
你好,追加到末尾的话就冲突了呀.....有没有办法能修改的呢
作者: went 时间: 2021-2-6 16:19
那就这个- @echo off & cd /d "%~dp0"
- set "foot=.changemap"
- set "file=server.properties"
- if not exist "logs\latest.txt" goto :exit
- for /f "delims=." %%i in ('findstr /i "%foot%" "logs\latest.txt"') do (
- set "level-name=%%i"
- set "resourcepack=https:网盘地址/%%i.zip"
- )
- (
- for /f "usebackq tokens=1* delims==" %%i in ("%file%") do (
- if /i "%%i"=="level-name" echo %%i=%level-name%
- if /i "%%i"=="resourcepack" echo %%i=%resourcepack%
- if /i not "%%i"=="level-name" if /i not "%%i"=="resourcepack" echo %%i=%%j
- )
- ) > "%file%_NEW"
- move /y "%file%_NEW" "%file%"
- start "" "stop.bat"
- echo say mapchangecomplete!
- :exit
- pause&exit
复制代码
作者: FinDream 时间: 2021-2-6 22:22
回复 6# went
感谢!!!!!
作者: FinDream 时间: 2021-2-6 22:41
回复 6# went
你好.....很抱歉又来打扰你
就是我这个脚本是想用来在一个保持开启的批处理(jar)中使用的,但是这个似乎是一次性的?
能否实现不停的或者说有几秒间隔的执行这个指令呢?(而且在不影响整个脚本的情况下)
谢谢了~~
作者: went 时间: 2021-2-6 23:01
goto + timeout 即可实现- @echo off & cd /d "%~dp0"
- set "foot=.changemap"
- set "file=server.properties"
- if not exist "logs\latest.txt" goto :exit
- REM 时间间隔(秒)
- set "times=30"
- :loop
- call :updateProfile
- timeout /t %times% /nobreak
- goto :loop
- :exit
- pause&exit
-
- :updateProfile
- echo.
- for /f "delims=." %%i in ('findstr /i "%foot%" "logs\latest.txt"') do (
- set "level-name=%%i"
- set "resourcepack=https:网盘地址/%%i.zip"
- )
- (
- for /f "usebackq tokens=1* delims==" %%i in ("%file%") do (
- if /i "%%i"=="level-name" echo %%i=%level-name%
- if /i "%%i"=="resourcepack" echo %%i=%resourcepack%
- if /i not "%%i"=="level-name" if /i not "%%i"=="resourcepack" echo %%i=%%j
- )
- ) > "%file%_NEW"
- move /y "%file%_NEW" "%file%"
- start "" "stop.bat"
- echo say mapchangecomplete!
- goto :eof
复制代码
作者: FinDream 时间: 2021-2-7 08:48
回复 9# went
感谢~唉连改个命令都不会我真是应该好好学习下才好....
作者: went 时间: 2021-2-7 12:01
回复 10# FinDream
了解基本语法后,推荐先学for,其它命令自然水到渠成
http://www.bathome.net/thread-2189-1-1.html
作者: FinDream 时间: 2021-2-10 13:12
回复 11# went
感谢大佬55555555!!!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |