所以我目前有一个简单的备份脚本,它只在游戏服务器可执行文件当前正在运行时运行。我在顶部使用一个变量来检查可执行文件的名称,但由于某种原因它不起作用。
set SERVER_EXECUTABLE_NAME="DayZServer_x64.exe"
set SERVER_BACKUP_DIRECTORY=""
set BACKUP_DIRECTORY=""
echo Checking if server is running...
tasklist /FI "IMAGENAME eq %SERVER_EXECUTABLE_NAME%" /FI "STATUS eq RUNNING" | find /I "%SERVER_EXECUTABLE_NAME%" > nul && (
echo Backing up files...
robocopy "%SERVER_BACKUP_DIRECTORY%" "%BACKUP_DIRECTORY%\%date:/=-% %time::=-%" /mir /s /w:0 /r:1
) || (
echo Server is not running, skipping backup...
)
Run Code Online (Sandbox Code Playgroud)
以下代码不起作用。由于某种原因,它显示以下错误: 找不到文件 - DAYZSERVER_x64.EXE
难道我做错了什么?如果我删除任务列表调用中的变量并将可执行文件名称直接放在那里,它工作正常。
这是由初始SET命令的简单代码错误引起的。您对其进行格式化的方式不符合您的目的。
就目前而言,set SERVER_EXECUTABLE_NAME="DayZServer_x64.exe"导致SERVER_EXECUTABLE_NAME相等"DayZServer_x64.exe"- 这将导致IMAGENAME eq %SERVER_EXECUTABLE_NAME%是IMAGENAME eq "%SERVER_EXECUTABLE_NAME%",这很好,但是您的 FIND 函数已经被引用,导致它看起来像""%SERVER_EXECUTABLE_NAME%""但是在 CMD 中它DayZServer_x64.exe不是"DayZServer_x64.exe"。
最后,我相信你想做的是正确的方法:
set "SERVER_EXECUTABLE_NAME=DayZServer_x64.exe"
Run Code Online (Sandbox Code Playgroud)
固定批次:
set "SERVER_EXECUTABLE_NAME=DayZServer_x64.exe"
set "SERVER_BACKUP_DIRECTORY="
set "BACKUP_DIRECTORY="
echo Checking if server is running...
tasklist /FI "IMAGENAME eq %SERVER_EXECUTABLE_NAME%" /FI "STATUS eq RUNNING" | find /I "%SERVER_EXECUTABLE_NAME%" > nul && (
echo Backing up files...
robocopy "%SERVER_BACKUP_DIRECTORY%" "%BACKUP_DIRECTORY%\%date:/=-% %time::=-%" /mir /s /w:0 /r:1
) || (
echo Server is not running, skipping backup...
)
Run Code Online (Sandbox Code Playgroud)