我制作了一个程序,需要管理员权限才能将自己复制到另一个文件夹。这就是我在程序开头添加这个(我在stackoverflow上找到它)的原因:
@echo off
:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
>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"
:--------------------------------------
然而,在将程序复制到文件夹后,我不再需要此代码,因为它不是必需的,它仍然会弹出窗口。 我的问题是:一旦使用该程序,这个代码可以以某种方式被删除吗? 所有代码都必须在同一个批处理文件中完成。
谢谢!
答案 0 :(得分:0)
不是将文件复制到新目录并在之后删除部分代码,而是如何:
启动批处理文件,检查管理员是否成功"写"目标目录的内容只是跳过要删除的行。
这样的事情:
@echo off
SET targetfile=C:\new\folder\targetfile.bat
:: BatchGotAdmin
REM your admin code here
:--------------------------------------
ECHO 1st line of your code>%targetfile%
ECHO 2nd line of your code>>%targetfile%
ECHO 3rd line of your code>>%targetfile%
REM ... your code ...
ECHO last line of your code>>%targetfile%
通过这种方式,您将创建"目标位置的文件。
另一种选择是使用FOR /F
循环来遍历您的文件,将其逐行复制到临时文件中,跳过" admin check"部分,删除原始文件并将新文件重命名为旧名称。这也是可能的,但它真的很难看。如果你更喜欢这个解决方案,请告诉我,我会发布一些代码。但要小心!你不会喜欢它! :d