首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从当前目录以管理员身份运行批处理文件(.bat)

从当前目录以管理员身份运行批处理文件(.bat)
EN

Stack Overflow用户
提问于 2017-06-21 12:15:28
回答 3查看 1.9K关注 0票数 0

我目前正在为一所学校编写代码,允许学生以管理员身份在windows设备上运行批处理文件,并接收使用网络基础设施所需的程序。

代码语言:javascript
复制
@echo Welcome to the Mossman State High School Additional Features Installer
@pause

@echo Starting the Credentials GUI
@echo Starting PaperCut Installer
@start "" %~dp0BYOx.exe
@start "" %~dp0client-local-install.exe

@echo Creating Printing Directory
@md C:\Printing

@echo Copying Print Mapping Files
@copy "" %~dp0configuration.xml C:\Printing /E /W
@copy "" %~dp0student_printers.xml C:\Printing /E /W
@copy "" %~dp0PrintMap2.exe C:\Printing /E /W

@copy "" %~dp0StudentPrinting.sfx.exe C:\ /E /W

@echo Running Connect Printer Setup
@start "C:\" StudentPrinting.sfx.exe

@echo Please complete the instructions on BYOx and PaperCut to finilize 
onboarding.
@pause

由于StudentPrinting.sfx.exe程序以前的编写方式,并且由于需要从C:\目录运行,所以需要作为管理员运行。

我最初发现%~dp0参数起作用了,但一旦进一步测试,我就会发现,一旦它击中了带有空格的计算机名,它就会失败。C:\Users\ComputerOne\Desktop\Auto_Installer可以工作,但C:\Users\Computer One\Desktop\Auto_Installer并不是因为计算机和一台计算机之间的空间。由于12岁至18岁的学生将使用它,他们将无法解决这一问题。

是否有一种方法可以让批处理文件作为管理员运行,但仍然从它所在的目录运行?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-21 13:04:35

首先,我将确保当前目录与脚本的目录匹配。(这样就不需要在前缀中加上%~dp0 0)。您需要使用Start的原因似乎也不充分,而且您的Copy命令似乎使用了错误的语法和不正确的选项。

代码语言:javascript
复制
@Echo Off

If /I Not "%CD%\"=="%~dp0" CD /D "%~dp0"

Echo Welcome to the Mossman State High School Additional Features Installer
Timeout 5 /NoBreak>Nul

Echo Copying Print Mapping Files
If Not Exist C:\Printing\ (
    Echo Creating Printing Directory
    MD C:\Printing
)
Copy /Y configuration.xml C:\Printing
Copy /Y student_printers.xml C:\Printing
Copy /Y PrintMap2.exe C:\Printing

Echo Copying printer Setup Files
Copy /Y StudentPrinting.sfx.exe C:\

Echo Running Connect Printer Setup
C:\StudentPrinting.sfx.exe

Echo Please complete the instructions on BYOx and PaperCut to finilize onboarding.

Echo Starting the Credentials GUI
BYOx.exe

Echo Starting PaperCut Installer
client-local-install.exe

Echo(
Echo Finished. Press any key to exit...
Timeout -1

我已将顺序更改为似乎更有意义的顺序,如果在运行其他两个可执行文件之前无法运行打印机设置,则请相应调整。

票数 0
EN

Stack Overflow用户

发布于 2017-06-21 19:12:01

好的,据我所理解,这是正确的解决方案:第一个代码块检查ADMIN,并提示您接受如果不是,或者如果您已经接受了,它将以admin的形式运行命令。然后,PUSHD %~dp0确保您正在.bat所在的当前目录中工作(在您的示例中是C:\),如果它与.bat文件位于同一个目录中,则可以只使用它的程序名!(不需要指定路径)

将其保存为.bat,并根据需要使用代码对其进行调整(请注意我指定的代码后面的行):

代码语言:javascript
复制
@echo off&cls
REM  --> CHECKING FOR ADMIN
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
REM -----------------PUT YOUR COMMANDS BELOW THIS LINE-------------------
CLS
PUSHD %~dp0
echo %CD%
echo.
echo HELLO!
echo.
pause
票数 0
EN

Stack Overflow用户

发布于 2017-06-22 11:42:01

非常感谢Compo & Raphael协助编程。我已经在虚拟机上测试了这个程序,它的工作就像预期的那样。

完成的代码如下;

代码语言:javascript
复制
@echo off&cls
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" 
"%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" 
"%SYSTEMROOT%\system32\config\system"
)

if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > 
"%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 
>> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"

If /I Not "%CD%\"=="%~dp0" CD /D "%~dp0"

echo Welcome to the Mossman State High School Additional Features Installer
timeout 1 /NoBreak>Nul

echo Copying Print Mapping Files
if not exist C:\Printing\ (
    echo Creating Printing Directory
    md C:\Printing
)
copy /Y configuration.xml C:\Printing
copy /Y student_printers.xml C:\Printing
copy /Y PrintMap2.exe C:\Printing

echo Copying Printer Setup Files
copy /Y StudentPrinting.sfx.exe C:\

echo Running Connect Printer Setup
C:\StudentPrinting.sfx.exe

echo Please complete the instructions on BYOx and PaperCut to finilize 
onboarding.

echo Starting the Credentials GUI
start BYOx.exe

echo Starting PaperCut Installer
start client-local-install.exe

echo(
echo Finished. Press any key to exit...
timeout -1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44675844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档