那些.ncb .obj .suo等等很多類型的中間產物,自然是不愿意被打包到源碼目錄之中的。這些文件如果不幸被打包,那么你30K的源碼被打包成30M,是很常見的事情。
我以前每次打包源碼之前,都會手動把所有的不需要的文件都給刪除掉。操作次數多了,就想辦法讓這個工作更簡單,起初我是編寫了一個批處理文件ClearSrc.bat,這個批處理可以遞歸刪除當前目錄下(包括子目錄)的所有無用文件。每次需要清理某個目錄的時候,把這個批處理文件copy到需要清理的文件夾,然后執行一下這個批處理,就把文件夾清理的干干凈凈了。
但隨著遇到的待清理文件類型的不斷增多,比如某個版本我增加了對VSS的臨時文件的刪除,某個版本我又增加對svn臨時文件的刪除,某個版本增加了對sln的升級備份文件的刪除。總之,我的ClearSrc由1.0慢慢升級到了5.0。隨著它執行次數的增多,電腦硬盤上也到處是它的身影了……
于是我又想了一個辦法,把這個批處理放到鼠標右鍵里面,每次點擊的時候,自動調用這個批處理。這樣我就不用把這個批處理到處copy來copy去了,電腦上也不會存在N個不同版本了——只要維護一個版本即可,也就是當前右鍵指向的那個版本。
接下來介紹一下實際的過程。
下面是這個批處理的內容:
cd "%1"
del *.ncb *.suo *.scc *.user *.aps *.obj *.ilk *.pdb *.idb *.pch *.dep *.res /s /f /a /q
del *.exe.embed.* *.exe.inter* *.dll.embed.* *.dll.inter* /s /f /a /q
del BuildLog.htm UpgradeReport*.* UpgradeLog.xml *.sln.old /s /f /a /q
del *.svn-base all-wcprops entries dir-prop-base /s /f /a /q
for /f "delims=" %%i in ('dir /ad /b /s') do call :rd_dir_empty "%%i"
goto :eof
rem ======= 刪除空目錄 =========
:rd_dir_empty
rd %1 2>nul||goto :eof
set dir_route=%1
for /f "delims=" %%i in (%dir_route%) do (
set dir_route="%%~dpi"
for /f "delims=" %%j in ('dir /ad /b "%%~dpi"')do rd "%%~dpi%%j" 2>nul||goto :eof
)
:: 把路徑最后的/去掉,以便set route_deepest="%%~dpi"能取到上一層路徑
if "%dir_route:~-2,1%"=="/" set dir_route="%dir_route:~1,-2%"
if /i not "%cd%"==%dir_route% call :rd_dir_empty %dir_route%
goto :eof
上面這個批處理,內容很簡單,首先是遞歸刪除目錄下所有特定擴展名或者包含特定關鍵字的文件,然后再刪除所有的空文件夾。
用戶也可以自己編輯一下,添加自己需要刪除的獨特類型,也可以去掉自己不需要刪除的內容。
而上面的這個批處理具體內容,我刪除了VC6一直到VC++2008的工程所產生的常見垃圾文件,同時也清理了vss和svn產生的臨時文件(我打包源碼的時候,一般會去掉這些,如果不希望清除版本控制信息,切忌慎用,我自己就有一次很悲催的清除了自己電腦上的開發目錄下的所有版本控制信息……)。
至于如何添加到右鍵菜單,可以參考下面這個步驟:
首先,將上面這個批處理文件,保存到某個目錄,比如“C:/ClearSrc.bat”。
然后,新建一個文本文檔,輸入以下內容(注意加粗的路徑就是上面那個批處理文件的路徑):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT/Directory/shell/clear]
@="清理源碼目錄"
[HKEY_CLASSES_ROOT/Directory/shell/clear/command]
@="/"C://CleanSrc.bat/" /"%1/""
將該文本文檔的擴展名修改為“.reg”,雙擊執行該reg,將上述內容寫入注冊表。
那么現在,但你在任何一個目錄上右鍵點擊時,就會多出一個“清理源碼目錄”的菜單項,如下所示:

執行這個后,會彈出一個cmd窗口,自動執行上面那個批處理,刪除所有需要刪除的內容。
補充說明一點:360安全衛士會認為這個是惡意軟件,然后把它給干掉,記得把它加入到信任列表吧。