Windows 10批处理文件:在早期版本中可用的文件上的奇怪行为

时间:2019-03-05 12:41:30

标签: batch-file

因此,我有以下批处理文件,该文件为Sauerbraten启动了一个游戏服务器:

@ECHO OFF

set SAUER_BIN=bin

IF /I "%PROCESSOR_ARCHITECTURE%" == "amd64" (
    set SAUER_BIN=bin64
)
IF /I "%PROCESSOR_ARCHITEW6432%" == "amd64" (
    set SAUER_BIN=bin64
)

start %SAUER_BIN%\sauerbraten.exe "-q$HOME\My Games\Sauerbraten" -gserver-log.txt -d %*

默认情况下,批处理文件随游戏安装一起提供,并且在Windows 7上运行良好。

以管理员身份运行时,在弹出窗口中出现以下错误:

Windows cannot find 'bin64\sauerbraten.exe'. Make sure you've typed the name correctly, then try again.

我已验证文件是否存在并且拼写正确。

在同一目录中,还有另一个批处理文件来启动游戏本身,除了最后一行中的几个启动参数外,其余文件均相同。运行时,它工作正常。我已将此文件复制粘贴到另一个文件中,并在出现不可见字符或任何东西的情况下使更改可见,但这没什么区别。

@ECHO OFF

set SAUER_BIN=bin

IF /I "%PROCESSOR_ARCHITECTURE%" == "amd64" (
    set SAUER_BIN=bin64
)
IF /I "%PROCESSOR_ARCHITEW6432%" == "amd64" (
    set SAUER_BIN=bin64
)

start %SAUER_BIN%\sauerbraten.exe "-q$HOME\My Games\Sauerbraten" -glog.txt %*

当不以admin身份运行时,服务器实际上似乎已启动(由于它输出到日志文件并给出错误消息,表明它无法创建服务器主机,我怀疑这与需要以admin身份运行有关)。

为什么我会看到这种行为?我想不出任何合理的解释。

1 个答案:

答案 0 :(得分:0)

根据可执行文件如何接受其参数,我建议:

@Echo Off
Set "SAUER_BIN=bin"
If Defined PROCESSOR_ARCHITEW6432 Set "SAUER_BIN=bin64"
If %PROCESSOR_ARCHITECTURE:~-2%==64 Set "SAUER_BIN=bin64"
Start "" "%~dp0%SAUER_BIN%\sauerbraten.exe" -q"$HOME\My Games\Sauerbraten" -g"log.txt" -d"%*"

或者:

@Echo Off
Set "SAUER_BIN=bin"
If Defined PROCESSOR_ARCHITEW6432 Set "SAUER_BIN=bin64"
If %PROCESSOR_ARCHITECTURE:~-2%==64 Set "SAUER_BIN=bin64"
Start "" "%~dp0%SAUER_BIN%\sauerbraten.exe" "-q$HOME\My Games\Sauerbraten" "-glog.txt" "-d%*"

我无法控制您的其他参数,因此您必须决定它应读取"%*"还是%*