Batch file 以管理员身份运行批处理文件命令error.exe';不被识别为内部或外部命令

Batch file 以管理员身份运行批处理文件命令error.exe';不被识别为内部或外部命令,batch-file,Batch File,以管理员身份运行时出错: BackGroundJob.exe“”未被识别为内部或外部命令、可操作程序或批处理文件 exe和bat文件都在同一个文件夹中 ECHO OFF CLS :MENU ECHO. ECHO ............................................... ECHO PRESS 1, 2 to select your task, or 3 to EXIT. ECHO ........................................

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

BackGroundJob.exe“”未被识别为内部或外部命令、可操作程序或批处理文件

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

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
当我不以管理员身份运行它时,它会运行。但要安装这个.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

没有给出太多的信息,所以这里有一个你可以尝试的方法


实际文件位置 似乎
backgroundJob.exe
不在:

  • 路径
    环境变量中的任何文件夹
  • 批处理脚本所在的文件夹
使用外部工具时,最好检查工具是否存在且是否可访问

如何确保文件存在
  • 如果存在filename.ext,则使用

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

    • 循环浏览目录并检索文件路径
当前目录
CD%CD%
不是必需的,因为它只是将目录更改为当前目录。此代码行仅在以前编辑过
%cd%
时使用,不建议这样做

用户eryksun提到,可能当前目录未设置为批处理文件的目录。考虑添加<代码> CD/D%~DP0< /代码>。code>cd
更改目录,
/d
启用驱动器更改,
%~dp0
表示驱动器和当前批处理脚本的路径


代码插入攻击 是非常不安全的,因为输入几乎可以是任何东西,从字母数字字符到特殊字符。如果
%M%
等于一个空格,则会发生以下情况:

IF   ==1
命令处理器不理解这一点

如果输入是

1==1 format D:\ &&
这将格式化您的D驱动器


退出脚本
GOTO-EOF
应该是
GOTO:EOF
,因为
:EOF
是一个预定义的标签,只能由
GOTO:EOF
访问。否则,cmd将跳转到未定义的EOF标签,从而导致错误

GOTO:EOF
工作时,我建议使用内部
exit
命令

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


隐藏@echo off的命令输出

您可以考虑使用<代码> @回音,而不是<代码> ECHOBOUT/<代码>,因为AT符号充当内联<代码> @ EXECUP 。< /P>初始工作目录不在您的控制范围内。更改到脚本目录,

cd/d%~dp0
,然后运行
\BackGroundJob.exe安装
。或者,您可以
在.exe文件的
位置,获取路径并执行
%pathToExe%\BackGroundJob.exe