【问题标题】:Bat file delete it's own folderbat文件删除它自己的文件夹
【发布时间】:2014-07-23 08:32:38
【问题描述】:

我有一个包含其他文件和文件夹的文件夹测试。我也有一个bat文件delete.bat

测试 测试\delete.bat

bat 文件使用下一条命令删除 test 的内容: rmdir C:\test /s /q

我也想删除文件夹test。如果我复制 delet.bat 文件并将其粘贴到另一个目录中,测试文件夹将被删除。

但是,如果我在 test 文件夹中运行 delete.bat 文件,则会删除 test 文件夹(包括 delete.bat 文件)的所有内容,但不会删除 test 文件夹。

我认为这是因为打开了测试文件夹。

有什么建议吗?如果 delete.bat 为了先关闭文件夹然后运行命令 rmdir C:\test /s /q,我可以在开头添加任何命令吗?

【问题讨论】:

  • 只需切换到另一个目录,cmd.exe 将不再访问它。

标签: windows batch-file directory


【解决方案1】:

如果您在 Windows 中使用win+R 运行,以下delete.bat 可以正常工作。

cd c:\
rmdir C:\test /s /q

【讨论】:

    【解决方案2】:

    好的,

    Sasha_gud 帮了大忙。

    现在我找到了一种在 bat 文件中添加代码以便以管理员身份运行的方法(因此以管理员身份运行将自动运行)。

    欲了解更多信息,请查看 How can I auto-elevate my batch file, so that it requests from UAC administrator rights if required?

    代码如下:

    :::::::::::::::::::::::::::::::::::::::::
    :: Automatically check & get admin rights
    :::::::::::::::::::::::::::::::::::::::::
    @echo off
    CLS 
    ECHO.
    ECHO =============================
    ECHO Running Admin shell
    ECHO =============================
    
    :checkPrivileges 
    NET FILE 1>NUL 2>NUL
    if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges ) 
    
    :getPrivileges 
    if '%1'=='ELEV' (shift & goto gotPrivileges)  
    ECHO. 
    ECHO **************************************
    ECHO Invoking UAC for Privilege Escalation 
    ECHO **************************************
    
    setlocal DisableDelayedExpansion
    set "batchPath=%~0"
    setlocal EnableDelayedExpansion
    ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs" 
    ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >>     "%temp%\OEgetPrivileges.vbs" 
    "%temp%\OEgetPrivileges.vbs" 
    exit /B 
    
    :gotPrivileges 
    ::::::::::::::::::::::::::::
    :START
    ::::::::::::::::::::::::::::
    setlocal & pushd .
    
    REM Run shell as admin (example) - put here code as you like
    
    cd c:\
    rmdir C:\Users\haris\Desktop\test /s /q
    

    只有最后两行是我的代码。

    【讨论】: