快速刪除C#項目中的bin和obj文件夾的方法


C#程序總會生成bin和obj文件夾,為了減小源碼的大小,就有必要將這兩個文件夾刪除,於是想到用批處理文件來刪除。

 

以下是批處理的代碼:

@echo off
set nowPath=%cd%
cd /
cd %nowPath%

::delete specify file(*.pdb,*.vshost.*)
for /r %nowPath% %%i in (*.pdb,*.vshost.*) do (del %%i)

::delete specify folder(obj,bin)
for /r %nowPath% %%i in (obj,bin) do (IF EXIST %%i RD /s /q %%i)

echo OK
pause

注:
1、批處理中兩個半角冒號開頭表示注釋掉這一行
2、將以上代碼復制到記事本中,並且命名為bat后綴的文件,如clear.bat.
3、clear.bat最好放到要執行刪除操作的目錄(或上層目錄)

如果只要刪除某個文件,可以將for /r %nowPath% %%i in (obj,bin) do (IF EXIST %%i RD /s /q %%i) 這一句去掉,然后將for /r %nowPath% %%i in (*.pdb,*.vshost.*) do (del %%i) 這一句中的(*.pdb,*.vshost.*)改成要刪除的文件。

 

出處:https://www.cnblogs.com/zjoch/p/5770409.html

=======================================================================================

我自己稍微修改和優化了下上面的代碼,如下:

優化1

@echo off
if [%1] equ [] echo 【未指定文件夾】 &goto end
set fp=%1
set fp="%fp%" & set fp=%fp:"=%
if "%fp%" neq "" if "%fp:~-1%" neq "\" set fp=%fp%\
set nowPath="%fp%"

set /a findFileCount=0
set /a findFolderCount=0
set /a delFileCount=0
set /a delFolderCount=0
set delFile=*.vshost.*
set delFolder=bin,obj
echo 准備清理%nowPath%目錄下的
echo 文件:%delFile% &echo 文件夾:%delFolder%
echo; &echo --------------------------------------------------

rem delete specify folder(such as:obj,bin)
::for /r %nowPath% %%i in (obj,bin) do (IF EXIST "%%i" echo RD /s /q "%%i")
echo 【待刪除文件夾:%delFolder%】 & for /r %nowPath% %%i in (%delFolder%) do (IF EXIST "%%i" echo  "%%i" &set /a findFolderCount+=1)
echo; &echo --------------------------------------------------
rem delete specify file(such as:*.pdb,*.vshost.*)
::for /r %nowPath% %%i in (*.pdb,*.vshost.*) do (echo del "%%i")
echo 【待刪除文件:%delFile%】 & for /r %nowPath% %%i in (%delFile%) do (IF EXIST "%%i" echo  "%%i" &set /a findFileCount+=1)
echo;
echo;
if %findFileCount% equ 0 if %findFolderCount% equ 0 echo [file or folder not found] &goto end
echo 共找到 %findFileCount% 個文件和 %findFolderCount% 個文件夾
set /p var=是否確定刪除以上文件和文件夾?[Y/N]:
if /i %var%==Y (goto DelFileAndFolder) else (goto cancelDel)

:DelFileAndFolder
echo Deleting file ......
rem delete specify folder(such as:obj,bin)
::for /r %nowPath% %%i in (obj,bin) do (IF EXIST "%%i" echo RD /s /q "%%i")
for /r %nowPath% %%i in (%delFolder%) do (IF EXIST "%%i" RD /s /q "%%i" &set /a delFolderCount+=1)
rem delete specify file(such as:*.pdb,*.vshost.*)
::for /r %nowPath% %%i in (*.pdb,*.vshost.*) do (IF EXIST "%%i" echo del "%%i")
for /r %nowPath% %%i in (%delFile%) do (IF EXIST "%%i" del "%%i" &set /a delFileCount+=1)
echo; &echo [Delete completed]
echo delete %delFolderCount% folders &echo delete %delFileCount% files &echo;
goto end

:cancelDel
echo; &echo [Cancel deletion] &echo;

:end
Pause
View Code

 優化2

@echo off
title 【刪除bin和obj文件夾】
echo;
if [%1] equ [] echo 【未指定文件夾】 &goto end
set fp=%1
set fp="%fp%" & set fp=%fp:"=%
if "%fp%" neq "" if "%fp:~-1%" neq "\" set fp=%fp%\
set nowPath="%fp%"

set /a findFileCount=0
set /a findFolderCount=0
set /a findAllCount=0
set /a delFileCount=0
set /a delFolderCount=0
set delFileOrFolder=*.vshost.*,bin,obj


echo; &echo 待清理目錄:%nowPath%
echo; &echo 刪除指定目錄下的:
set delType=%delFileOrFolder%
:loop
for /f "tokens=1* delims=," %%a in ("%delType%") do echo %%a &set delType=%%b
if defined delType goto :loop
echo; &echo 按任意鍵將繼續,退出請關閉窗口。 &pause>nul
echo; &echo --------------------------------------------------
echo 待刪除列表:
rem search delete specify file or folder(such as:*.pdb,*.vshost.*)
::for /r %nowPath% %%i in (*.pdb,*.vshost.*) do (echo del "%%i")
for /r %nowPath% %%i in (%delFileOrFolder%) do (IF EXIST "%%i" echo "%%i" &IF EXIST "%%i\.\" (set /a findFolderCount+=1) else set /a findFileCount+=1)
set /a findAllCount=%findFolderCount%+%findFileCount%
echo;
if %findAllCount% equ 0 echo [file or folder not found] &goto end
echo 共找到%findAllCount%個待刪除項【文件:%findFileCount%個,文件夾:%findFolderCount%個】
echo --------------------------------------------------
set /p var=是否確定刪除以上文件或文件夾?[Y/N]:
if /i "%var%"=="Y" (goto DelFileAndFolder) else goto cancelDel

:DelFileAndFolder
echo [Deleting file] ......
rem delete specify file or folder(such as:obj,bin,*.pdb,*.vshost.*)
::for /r %nowPath% %%i in (%delFileOrFolder%) do (IF EXIST "%%i" IF EXIST "%%i\.\" (echo "%%i\.\") ELSE echo "%%i")
for /r %nowPath% %%i in (%delFileOrFolder%) do (IF EXIST "%%i" IF EXIST "%%i\.\" (RD /s /q "%%i" &set /a delFolderCount+=1) else del "%%i" &set /a delFileCount+=1)
echo; &echo [Delete completed] delete %delFileCount% files, delete %delFolderCount% folders &echo;
goto end

:cancelDel
echo; &echo [Cancel deletion] &echo;

:end
Pause
View Code

 優化3

優化了顯示待刪除文件或文件的總大小

優化了受set只支持32位的限制,可以支持大數字的加法運算

優化支出中文路徑的文件大小的計算。

@echo off&chcp 936>nul&setlocal enabledelayedexpansion
title 【刪除bin和obj文件夾】
echo;
if [%1] equ [] echo 【未指定文件夾】 &goto end
set fp=%1
set fp="%fp%" & set fp=%fp:"=%
if "%fp%" neq "" if "%fp:~-1%" neq "\" set fp=%fp%\
set nowPath="%fp%"

set /a findFileCount=0
set /a findFolderCount=0
set /a findAllCount=0
set /a delFileCount=0
set /a delFolderCount=0
set /a fileSize=0
set delFileOrFolder=*.vshost.*,bin,obj


echo; &echo 待清理目錄:%nowPath%
echo; &echo 刪除指定目錄下的:
set delType=%delFileOrFolder%
:loop
for /f "tokens=1* delims=," %%a in ("%delType%") do echo %%a &set delType=%%b
if defined delType goto :loop
echo; &echo 按任意鍵將繼續,退出請關閉窗口。 &pause>nul
echo; &echo --------------------------------------------------
echo 待刪除列表:

rem search delete specify file or folder(such as:*.pdb,*.vshost.*)
::for /r %nowPath% %%i in (*.pdb,*.vshost.*) do (echo del "%%i")
for /r %nowPath% %%i in (%delFileOrFolder%) do (IF EXIST "%%i" (echo "%%i"&IF EXIST "%%i\.\" (set /a findFolderCount+=1) else set /a findFileCount+=1
    set fs=0&(for /f "tokens=3* delims= " %%a in ('dir "%%i" /a-d /s /-c ^| find /i "個文件"') do set fs=%%a)&call :bigNumAdd !fileSize! !fs! fileSize
))
set /a findAllCount=%findFolderCount%+%findFileCount%
echo;&if %findAllCount% equ 0 echo [file or folder not found] &goto end
call :numToThousand %fileSize% fileSize
echo 共找到%findAllCount%個待刪除項【文件:%findFileCount%個,文件夾:%findFolderCount%個,總共大小:%fileSize% bytes】
echo --------------------------------------------------
set /p var=是否確定刪除以上文件或文件夾?[Y/N]:
if /i "%var%"=="Y" (goto DelFileAndFolder) else goto cancelDel

:DelFileAndFolder
rem delete specify file or folder(such as:obj,bin,*.pdb,*.vshost.*)
::for /r %nowPath% %%i in (%delFileOrFolder%) do (IF EXIST "%%i" IF EXIST "%%i\.\" (echo "%%i\.\") ELSE echo "%%i")
for /r %nowPath% %%i in (%delFileOrFolder%) do (IF EXIST "%%i" (echo Deleting file "%%i"&IF EXIST "%%i\.\" (RD /s /q "%%i" &set /a delFolderCount+=1) else del "%%i" &set /a delFileCount+=1))
echo; &echo [Delete completed] delete %delFileCount% files, delete %delFolderCount% folders, total size %fileSize% bytes &echo;
goto end

:cancelDel
echo; &echo [Cancel deletion] &echo;

:end
Pause
goto :eof


::浮點加法 call _ADD  <被加數> <加數> [返回變量]
::分別支持十進制的64位整數部分和64位小數部分,一次計算僅用0.01秒
:bigNumAdd <被加數> <加數> [返回變量]   // by jack on 2021-09-03
(setlocal enabledelayedexpansion
set L=&for /l %%a in (1,1,8) do set L=!L!00000000
for /f "tokens=1-3 delims=." %%a in ("!L!%1.!L!") do set at=%%a&set aw=%%b%%c
for /f "tokens=1-3 delims=." %%a in ("!L!%2.!L!") do set bt=%%a&set bw=%%b%%c
set a=!at:~-64!!aw:~,64!&set b=!bt:~-64!!bw:~,64!&set e=&set v=200000000
for /l %%a in (8,8,128)do set/a v=1!b:~-%%a,8!+1!a:~-%%a,8!+!v:~-9,-8!-2&set e=!v:~-8!!e!
set e=!e:0= !&for /f "tokens=*" %%a in ("!e:~,-64!_.!e:~64!") do set e=%%~nxa
set e=!e:_=!&for %%a in ("!e: =0!") do endlocal&(if %3.==. (echo %%~a) else set %3=%%~a)
exit/b)

::整數字符轉成千分符表示
:numToThousand  <數字參數> [返回變量]
(setlocal enabledelayedexpansion&set n=%~1
set len=0&for /l %%i in (0,1,1000) do if "!n:~%%i,1!."=="." set len=%%i&goto :breakFor
:breakFor
set nv=&for /l %%a in (1,1,%len%)do (set nv=!n:~-%%a,1!!nv!&set/a m=%%a%%3&if !m!==0 if not %%a==%len% set nv=,!nv!)
endlocal&(if %2.==. (echo %nv%) else set %2=%nv%)
exit/b)
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM