以管理员批处理文件命令运行命令错误.exe'不被视为内部或外部命令

时间:2017-08-17 07:30:31

标签: batch-file

以管理员身份运行时出错:

  

BackGroundJob.exe'不被识别为内部或外部命令,可操作程序或批处理文件。

exe文件和bat文件都在同一个文件夹中。

当我以管理员身份运行时运行它。但要安装此.exe,我需要从同一个文件夹中以管理员身份安装它。

ECHO OFF
CLS
:MENU
ECHO.
ECHO ...............................................
ECHO PRESS 1, 2 to select your task, or 3 to EXIT.
ECHO ...............................................
ECHO.
ECHO 1 - Install BackGroundJob
ECHO 2 - UnInstall BackGroundJob
ECHO 3 - EXIT

ECHO.
SET /P M=Type 1, 2, or 3 then press ENTER:
IF %M%==1 GOTO INSTALL
IF %M%==2 GOTO UNINSTALL
IF %M%==3 GOTO EOF
:INSTALL
CD %cd%
BackGroundJob.exe install
GOTO MENU
:UNINSTALL
CD %cd%
BackGroundJob.exe uninstall
GOTO MENU

1 个答案:

答案 0 :(得分:2)

给出的信息不多,所以这是你可以尝试的一个镜头。

实际文件位置

似乎backgroundJob.exe不在:

  • path环境变量
  • 中的所有文件夹
  • 批处理脚本所在的文件夹

使用外部工具时,最好检查工具是否存在且可以访问。

如何确保文件存在

  • 使用IF EXIST filename.ext

    • 这可以检查文件是否存在,进一步防止出现此类错误。
  • 或者,使用forwhere来了解文件的位置

    • 遍历目录并检索文件路径。

当前目录

CD %cd%不是必需的,因为它只是将目录更改为当前目录。这行代码仅在以前编辑%cd%时才会使用,不推荐使用。

用户eryksun已经提到,可能您当前的目录未设置为批处理文件的目录。考虑添加cd /d %~dp0cd更改目录,/d启用驱动器更改,%~dp0代表当前批处理脚本的驱动器和路径。

代码插入漏洞利用

IF %M%==1

非常不安全,因为输入几乎可以是任何东西,从字母数字字符到特殊字符。如果%M%等于空格,则会发生这种情况:

IF   ==1

命令处理器不明白这一点。

此外,如果输入是

1==1 format D:\ &&

这将格式化您的D盘。

退出脚本

GOTO EOF应为GOTO :EOF,因为:EOF是预定义的标签,并且只能由GOTO :EOF访问。否则,cmd将跳转到未定义的EOF标签,从而导致错误。

虽然GOTO :EOF有效,但我建议您使用内部exit命令。

EXIT退出当前的命令控制台。如果要在不关闭控制台的情况下退出子例程或其他脚本,则应尝试exit /b

隐藏@echo的命令输出

您可以考虑使用@echo off代替echo off,因为旁号充当内联@echo off