您可以删除批处理文件/ cmd程序中的特定行吗?

时间:2015-09-17 07:26:59

标签: batch-file cmd

我制作了一个程序,需要管理员权限才能将自己复制到另一个文件夹。这就是我在程序开头添加这个(我在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"
:--------------------------------------

然而,在将程序复制到文件夹后,我不再需要此代码,因为它不是必需的,它仍然会弹出窗口。 我的问题是:一旦使用该程序,这个代码可以以某种方式被删除吗? 所有代码都必须在同一个批处理文件中完成。

谢谢!

1 个答案:

答案 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

相关问题