我创建了一个快速批处理文件来检查valheim服务器,并对保存的内容进行备份,因为它不在服务器文件夹中,但我想让它更容易使用变量。
我想在这里设置一个变量for %%a in (C:\Users\Administrator\AppData\LocalLow\IronGate\Valheim\worlds\Dedicated.db)
例如for %%a in (%%valserverdb\Dedicated.db)
如何做到这一点?
@echo off
:loop
tasklist /FI "IMAGENAME eq valheim_server.exe" 2>NUL | find /I /N "valheim_server.exe">NUL
if "%ERRORLEVEL%"=="0" echo Valheim Server is running
if "%ERRORLEVEL%"=="1" echo Valheim Server is not running starting it. | E:\gameservers\valheim\start_headless_server.bat
SET valserverdb=C:\Users\Administrator\AppData\LocalLow\IronGate\Valheim\worlds
SET valbackup=E:\gameservers\backup\IronGate\Valheim\worlds
for %%a in (C:\Users\Administrator\AppData\LocalLow\IronGate\Valheim\worlds\Dedicated.db) do set valserverdbcheck=%%~ta
for %%b in (E:\gameservers\backup\IronGate\Valheim\worlds\Dedicated.db) do set valbackupcheck=%%~tb
if "%valserverdbcheck%" gtr "%valbackupcheck%" (xcopy "%valserverdb%" "%valbackup%" /S /E /Y) else (@echo File has not been changed. skipping)
timeout /t 300 /nobreak > NUL
goto loop发布于 2021-02-15 17:04:17
if "%ERRORLEVEL%"=="1" echo Valheim Server is not running starting it. | E:\gameservers\valheim\start_headless_server.bat这将运行E:\game...rver.bat并将Valheim Server is not running starting it.作为stdin上的输入提供给该.bat。
我建议您将|替换为&,以便同时执行echo和运行.bat。
--
提示:使用set "var1=data"设置值-这可以避免由尾随空格引起的问题。相比之下,使用if "thing1" == "thing2" ...可以避免thing1/2中的空格导致的问题。
if "%valserverdbcheck%" gtr "%valbackupcheck%"将两个日期作为字符串进行比较,而不是作为日期值。我使用dd/mm/yy...格式表示日期,所以对于我来说,如果服务器日期是01/02/2021 (2月1日),而备份日期是31/01/2021,那么由于"01/02/2021“小于"31/01/2021”,比较将不会选择适当的选项。我建议neq是一个更合适的比较操作符。
%%a in (%%valserverdb\Dedicated.db)的语法不正确。请提供先行字符串和所需字符串的示例。
https://stackoverflow.com/questions/66204366
复制相似问题