以管理员身份运行时出错:
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
给出的信息不多,因此您可以尝试一下。
实际文件位置
看起来backgroundJob.exe
不在:
- 中的任何文件夹
path
环境变量
- 批处理脚本所在的文件夹
使用外部工具时,最好检查该工具是否存在并且可以访问。
如何确保文件存在
当前目录
CD %cd%
不是必需的,因为它只是将目录更改为当前目录。这行代码仅在以下情况下才会使用%cd%
之前已经编辑过,不推荐。
用户 eryksun 提到,也许您的当前目录没有设置为批处理文件的目录。考虑添加cd /d %~dp0
. cd
更改目录,/d
实现驱动器更换,并且%~dp0
代表当前批处理脚本的驱动器和路径。
代码插入漏洞
IF %M%==1
非常不安全,因为输入几乎可以是任何内容,从字母数字字符到特殊字符。如果%M%
等于一个空格,会发生这种情况:
IF ==1
命令处理器不理解这一点。
另外,如果输入是
1==1 format D:\ &&
这将格式化您的 D 驱动器。
退出脚本
GOTO EOF
应该GOTO :EOF
, as :EOF
是一个预定义的标签,只能由GOTO :EOF
。否则,cmd 将跳转到未定义的 EOF 标签,从而导致错误。
While GOTO :EOF
有效,我建议使用内部exit
命令。
EXIT
退出当前命令控制台。如果您想退出子例程或附加脚本而不关闭控制台,您应该尝试exit /b
反而。
隐藏@echo off的命令输出
您可以考虑使用@echo off
代替echo off
,因为 at 符号充当内联@echo off
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)