任务列表中的批次变量问题

时间:2018-12-28 03:00:19

标签: batch-file

因此,我目前有一个简单的备份脚本,该脚本仅在当前正在运行游戏服务器可执行文件时运行。我在顶部使用一个变量来检查可执行文件的名称,但是由于某种原因,它不起作用。

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...
)

以下代码不起作用。由于某种原因,它显示以下错误: 找不到文件-DAYZSERVER_x64.EXE

我做错什么了吗?如果我在任务列表调用中删除了变量并将可执行文件名称直接放在其中,那么它将正常工作。

1 个答案:

答案 0 :(得分:3)

这是由初始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"

固定批次:

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...
)