[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何检测文本内容并将其改写入另一个文件内?

就是我想要在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就更好了)
自己研究了很久没搞好....所以来这里求助啦~~谢谢啦~~
————————
哦对,两个写入的操作都是修改

回复 1# FinDream


    以及如果说能附带上某些教程的链接就更好了....想系统的学一下www

TOP

直接把信息追加到server.properties文本末尾
  1. @echo off & cd /d "%~dp0"
  2. set "foot=.changemap"
  3. if not exist "logs\latest.txt" goto :exit
  4. for /f "delims=." %%i in ('findstr /i "%foot%" "logs\latest.txt"') do (
  5. echo level-name=%%i
  6. echo resourcepack=https:网盘地址/%%i.zip
  7. (
  8. echo level-name=%%i
  9. echo resourcepack=https:网盘地址/%%i.zip
  10. ) >> "server.properties"
  11. )
  12. start "" "stop.bat"
  13. echo say mapchangecomplete!
  14. :exit
  15. pause&exit
复制代码

TOP

回复 3# went


    太感谢了!我这就去试试

TOP

回复 3# went



你好,追加到末尾的话就冲突了呀.....有没有办法能修改的呢

TOP

那就这个
  1. @echo off & cd /d "%~dp0"
  2. set "foot=.changemap"
  3. set "file=server.properties"
  4. if not exist "logs\latest.txt" goto :exit
  5. for /f "delims=." %%i in ('findstr /i "%foot%" "logs\latest.txt"') do (
  6. set "level-name=%%i"
  7. set "resourcepack=https:网盘地址/%%i.zip"
  8. )
  9. (
  10. for /f "usebackq tokens=1* delims==" %%i in ("%file%") do (
  11. if /i "%%i"=="level-name" echo %%i=%level-name%
  12. if /i "%%i"=="resourcepack" echo %%i=%resourcepack%
  13. if /i not "%%i"=="level-name" if /i not "%%i"=="resourcepack" echo %%i=%%j
  14. )
  15. ) > "%file%_NEW"
  16. move /y "%file%_NEW" "%file%"
  17. start "" "stop.bat"
  18. echo say mapchangecomplete!
  19. :exit
  20. pause&exit
复制代码

TOP

回复 6# went


    感谢!!!!!

TOP

回复 6# went


    你好.....很抱歉又来打扰你
就是我这个脚本是想用来在一个保持开启的批处理(jar)中使用的,但是这个似乎是一次性的?
能否实现不停的或者说有几秒间隔的执行这个指令呢?(而且在不影响整个脚本的情况下)
谢谢了~~

TOP

goto + timeout 即可实现
  1. @echo off & cd /d "%~dp0"
  2. set "foot=.changemap"
  3. set "file=server.properties"
  4. if not exist "logs\latest.txt" goto :exit
  5. REM 时间间隔(秒)
  6. set "times=30"
  7. :loop
  8. call :updateProfile
  9. timeout /t %times% /nobreak
  10. goto :loop
  11. :exit
  12. pause&exit
  13. :updateProfile
  14. echo.
  15. for /f "delims=." %%i in ('findstr /i "%foot%" "logs\latest.txt"') do (
  16. set "level-name=%%i"
  17. set "resourcepack=https:网盘地址/%%i.zip"
  18. )
  19. (
  20. for /f "usebackq tokens=1* delims==" %%i in ("%file%") do (
  21. if /i "%%i"=="level-name" echo %%i=%level-name%
  22. if /i "%%i"=="resourcepack" echo %%i=%resourcepack%
  23. if /i not "%%i"=="level-name" if /i not "%%i"=="resourcepack" echo %%i=%%j
  24. )
  25. ) > "%file%_NEW"
  26. move /y "%file%_NEW" "%file%"
  27. start "" "stop.bat"
  28. echo say mapchangecomplete!
  29. goto :eof
复制代码

TOP

回复 9# went


    感谢~唉连改个命令都不会我真是应该好好学习下才好....

TOP

回复 10# FinDream

了解基本语法后,推荐先学for,其它命令自然水到渠成
http://www.bathome.net/thread-2189-1-1.html

TOP

回复 11# went


    感谢大佬55555555!!!

TOP

返回列表