批处理文件-删除文件夹内容和父文件夹

时间:2020-05-14 17:02:57

标签: batch-file

我在BATCH FILE的开头创建了以下目录来存储临时内容:

“%userprofile%\ Downloads \ VersionCheckWillDelete”

我希望删除此文件夹及其所有内容。

以下内容仅删除文件夹中的数据,而不删除文件夹本身:

RD /S /Q "%userprofile%\Downloads\VersionCheckWillDelete"

编辑:原来它没有删除它,因为BATCH文件仍在使用它。我考虑过POWERSHELL仍在打开并尝试杀死它,但它尚未打开。如何在后台关闭它。它不再需要运行了吗? “该进程无法访问该文件,因为它正在被另一个进程使用。”

以下是我的代码:

 @echo off

:version_chk

SET USER_VER=1.1.2-RC

ECHO * * * * * * * * * * * * *
ECHO CHECKING FOR UPDATES...
ECHO * * * * * * * * * * * * *

cd "%userprofile%\Downloads"
    mkdir "%userprofile%\Downloads\VersionCheckWillDelete"

cd "%userprofile%\Downloads\VersionCheckWillDelete"

powershell -Command "Invoke-WebRequest https://github.com/KSanders7070/AIRPORT_ALIAS_CREATION/blob/master/Version_Check -OutFile 'version_check.HTML'"

findstr "VERSION-" "version_check.HTML" >> "GitHub_Version.txt"

cd "%userprofile%\Downloads\VersionCheckWillDelete"

for /f "delims=" %%x in (GitHub_Version.txt) do set GH_VER_STRING_ORIGINAL=%%x

for /f "tokens=2 delims=<" %%x in ("%GH_VER_STRING_ORIGINAL%") do set GH_VER_STRING_FIRST_HALF=%%x

SET "GH_VER=%GH_VER_STRING_FIRST_HALF:*VERSION-=%"

if %USER_VER% == %GH_VER% GOTO NORMAL_PROCESS

:UPDATE_AVAIL

CLS

START "" "https://github.com/KSanders7070/AIRPORT_ALIAS_CREATION/releases"

ECHO * * * * * * * * * * * * *
ECHO     UPDATE AVAILABLE
ECHO * * * * * * * * * * * * *
ECHO.
ECHO.
ECHO GITHUB VERSION: %GH_VER%
ECHO YOUR VERSION:   %USER_VER%
ECHO.
ECHO.
ECHO PLEASE CLOSE THIS BATCH FILE AND GO DOWNLOAD THE MOST RECENT UPDATE AVAILABLE:
ECHO.
ECHO https://github.com/KSanders7070/AIRPORT_ALIAS_CREATION/releases
ECHO.
ECHO.
ECHO OR YOU MAY PRESS ANY KEY TO CONTINUE USING THIS VERSION.
ECHO.
ECHO.

cd "%userprofile%\Downloads"
rd /S /Q "%userprofile%\Downloads\VersionCheckWillDelete\"
PAUSE

:NORMAL_PROCESS

CLS

cd "%userprofile%\Downloads"
rd /S /Q "%userprofile%\Downloads\VersionCheckWillDelete\"

ECHO Your BATCH file is the most up to date version.

PAUSE

3 个答案:

答案 0 :(得分:0)

要删除目录,您需要使用此命令。

rmdir path
del -f path

答案 1 :(得分:0)

解决方案: 删除START“ URL”行允许BATCH删除文件夹。不确定为什么要依赖Chrome,但可以解决问题。因此,将RD命令放在START“”命令之前,对我来说一切正常。

答案 2 :(得分:0)

首先绝对没有理由将目录更改为%UserProfile%\Downloads\VersionCheckWillDelete。此外,如果这是Downloads目录的用途之一,则可能没有理由使用%Temp%位置。无论选择哪种方式,您实际上只需要解析的version_check.html文件,因此为什么不将其直接放在所选位置,而不是创建新目录并随后将其删除。 (这样,您只需要在必要时删除文件,我希望每次运行时文件都会被覆盖)

也就是说,这可能就是我要做的事情:

@Echo Off
Set "USER_VER=1.1.2-RC"
Echo * * * * * * * * * * * * *
Echo CHECKING FOR UPDATES...
Echo * * * * * * * * * * * * *
Echo(
If Not Exist "%UserProfile%\Downloads\VersionCheckWillDelete\" MD "%UserProfile%\Downloads\VersionCheckWillDelete"
%__AppDir__%WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command "Invoke-WebRequest -URI \"https://github.com/KSanders7070/AIRPORT_ALIAS_CREATION/blob/master/Version_Check\" -OutFile \"%UserProfile%\Downloads\VersionCheckWillDelete\version_check.html\""
For /F "Tokens=3 Delims=><" %%G In ('%__AppDir__%findstr.exe ">VERSION-[0-9]" "version_check.html"') Do For /F "Tokens=1* Delims=-" %%H In ("%%G") Do Set "GH_VER=%%I"
RD "%UserProfile%\Downloads\VersionCheckWillDelete"
If "%USER_VER%" == "%GH_VER%" Echo Your batch file is the most up to date version.& GoTo Continue
ClS
Echo * * * * * * * * * * * * *
Echo     UPDATE AVAILABLE
Echo * * * * * * * * * * * * *
Echo(
Echo GITHUB VERSION: %GH_VER%
Echo YOUR VERSION:   %USER_VER%
Echo(
Echo YOU ARE NOT USING THE LATEST VERSION!
Echo(
Echo 1. DOWNLOAD THE LATEST VERSION NOW
Echo 2. CONTINUE USING THIS OUTDATED VERSION
Echo(
%__AppDir__%choice.exe /C 12
If ErrorLevel 2 GoTo Continue
Echo Your Web Browser will now open on the Releases page and this batch file will close.
%__AppDir__%timeout.exe /T 5
Start "" "https://github.com/KSanders7070/AIRPORT_ALIAS_CREATION/releases"
GoTo :EOF

:Continue
Echo(
Echo Continuing . . .
Pause
ClS