0

一个问题是在此结束时尝试调用 createserver.bat 时发生崩溃

del %USERPROFILE%\Desktop\TerrariaServer\filebin\serverparams.cmd
wget http://***/serverparams.cmd

call serverparams.cmd

IF name==default (
del %USERPROFILE%\Desktop\TerrariaServer\filebin\serverparams.cmd
call senderror.bat
) ELSE (
randomport -default -defaut -default
timeout /t 1
) 
IF NOT name==default (
sysresourceoutput
timeout /t 5
call sysresources
IF %ram% GTR 1600 (
call %USERPROFILE%\Desktop\TerrariaServer\createserver.bat
)
)

虽然 createserver.bat 单独运行良好。

另一个问题是通过调用 serverparams.cmd.. 链接设置值或使用上述方法正确设置 serverparams 值,尽管通过下面 startserver 中的一系列命令运行它是正常的(在基本目录中)。

call setname.cmd
call setvars.cmd

set path=%USERPROFILE%\desktop\TerrariaServer

ECHO set port=%var1% >%path%\%name%_set.cmd
ECHO set players=%var2% >>%path%\%name%_set.cmd
ECHO set autocreate=%var3% >>%path%\%name%_set.cmd
ECHO set worldname=%var4% >>%path%\%name%_set.cmd
ECHO set password=%var5% >>%path%\%name%_set.cmd
ECHO set motd=%var6% >>%path%\%name%_set.cmd
ECHO set lang=%var7% >>%path%\%name%_set.cmd
ECHO set priority=%var8% >>%path%\%name%_set.cmd
ECHO set name=%name% >>%path%\%name%_set.cmd

call %name%_set.cmd

ECHO maxplayers=%players% >%path%\%name%_config.txt
ECHO world=%USERPROFILE%\Documents\My Games\Terraria\Worlds\%worldname%.wld >>%path%\%name%_config.txt
ECHO port=%port% >>%path%\%name%_config.txt
ECHO password=%password% >>%path%\%name%_config.txt
ECHO motd=%motd% >>%path%\%name%_config.txt
ECHO worldpath=%USERPROFILE%\Documents\My Games\Terraria\Worlds\ >>%path%\%name%_config.txt
ECHO secure=1 >>%path%\%name%_config.txt
ECHO lang=%lang% >>%path%\%name%_config.txt
ECHO upnp=0 >>%path%\%name%_config.txt
ECHO #npcstream=60 >>%path%\%name%_config.txt
ECHO priority=%priority% >>%path%\%name%_config.txt

ECHO IF EXIST "%USERPROFILE%\Documents\My Games\Terraria\Worlds\%worldname%" ( >%path%\%name%_start.bat
ECHO TerrariaServer -config %path%\%name%_config.txt >>%path%\%name%_start.bat
ECHO ) ELSE ( >>%name%_start.bat
ECHO TerrariaServer -config %path%\%name%_config.txt -port %port% -players %players% -world "%USERPROFILE%\Documents\My Games\Terraria\Worlds\%worldname%.wld" -autocreate %autocreate% -worldname %worldname%.wld >>%path%\%name%_start.bat
ECHO ) >>%path%\%name%_start.bat

call %path%\%name%_start.bat

我的问题是,有没有我遗漏的细微差别?我认为有一种更动态的方式来列出一组递增变量,而不是手动将它们命名为 var01、var02

此外,它会在 %worldname% 之后放置一个空格,但我可以接受。

4

1 回答 1

1

像这样的行永远不会执行,因为没有要评估的 %variables%,它正在比较不同的静态字符串。

IF name==default (

当用户配置文件包含空格或 & 字符时,这样的行将失败。解决方案是将整个“路径\文件名”用双引号括起来:

del "%USERPROFILE%\Desktop\TerrariaServer\filebin\serverparams.cmd"

应该编辑像这样的行以在行首包含重定向。这解决了每行末尾的空格。

ECHO set port=%var1% >%path%\%name%_set.cmd

以这种方式重写行并删除尾随空格

>"%path%\%name%_set.cmd" ECHO set port=%var1%
>>"%path%\%name%_set.cmd" ECHO set players=%var2%

包含双引号以适应长路径名\文件名元素,并将 %path% 名称更改为PATH系统变量,使用它会破坏一切。

于 2013-10-06T23:25:08.880 回答