【问题标题】:Run as admin batch file command error .exe' is not recognized as an internal or external command以管理员身份运行批处理文件命令错误 .exe' 不被识别为内部或外部命令
【发布时间】:2017-08-17 07:30:30
【问题描述】:

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

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

【问题讨论】:

  • 初始工作目录不在您的控制范围内。切换到脚本目录cd /d %~dp0,然后运行.\BackGroundJob.exe install
  • 或者,您可以where .exe 文件,获取路径并执行%pathToExe%\BackgroundJob.exe

标签: batch-file


【解决方案1】:

提供的信息不多,因此您可以尝试一下。


实际文件位置

好像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 off的命令输出

您可以考虑使用@echo off 而不是echo off,因为at 符号充当内联@echo off

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2014-10-19
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多