来bathome不久,感觉这里的学习气氛非常高涨严谨,以前自学了N久的学到的批处理知识还不如这里一天学到的多。这个代码是多久前就有构思,不过苦于当时技术不足,没能实现,最近现学现用,总算完成了。希望听听高手们的意见,努力改善代码。)
(用了很多笨办法,望高手斧正)- ::主思想是将文件进行清0运算,然后命名为随机名字,再进行删除,这样如果用恢复软件恢复的化
- ::也没办法复原原来的文件。对文件夹则是直接随机命名然后删除。
- ::理论上应该是fsutil对文件进行清0效果最好,不过考虑到fsutil只能在ntfs上处理,而且需要管
- ::理员权限才能运行,最后还是用了最通用的copy命令。
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- @echo off
- title [DELTER v1.1 by Heroest@6park]
- ::02/08/2010
- :bof
-
- ::开启延迟变量
- setlocal enabledelayedexpansion
-
- cls
-
- ::用set/p来获得路径
- set /p input=[Drag single file or folder into here]:
- ::判断是文件还是文件夹
-
- if exist %input%\ goto folder
- if exist %input% goto file
- echo ERROR.&pause
- goto bof
-
- :folder
- ::将%input%路径push一下,这样当前路径就变为%input%了
- pushd %input%
-
- ::历遍文件夹内所有文件,并将详细路径参数传递给:myDel处理
- for /f "delims=" %%a in ('dir /b /s /a-d') do echo Deleting [%%a] && call :myDel "%%a"
-
- ::准备删除文件夹了,先生成临时列表
- echo.&echo [Deleting Folders...]
- echo.>temp.txt
- set numOfFol=0
- ::这里碰到了点问题,因为用dir生成的列表格式是先根目录,然后再是子目录,这样的话对随后的
- ::重命名工作带来了麻烦,所以用了延时变量重新生成了一个跟原来完全相反的目录列表(先是::子目录,然后是根目录)
- for /f "delims=" %%b in ('dir /b /s') do (set /a numOfFol+=1 && set fol_!numOfFol!=%%b)
- for /l %%c in (%numOfFol%,-1,1) do (echo !fol_%%c!>>temp.txt)>nul 2>nul
-
- ::目录列表重新整理好了,现在可以进行命名了。我这里使用了子程序的办法,将路径信息传递给
- :: :myRen来处理
- for /f "skip=1 delims=" %%d in ('type temp.txt ^& echo.^>temp.txt') do call :myRen "%%d" >nul 2>nul
-
- ::%input%下所有内容都处理好了,现在轮到%input%本身了,先回复原来的路径先
- popd
-
- ::将%input%的路径信息传给:rootRen那里处理
- call :rootRen %input%
- rd /s /q "%rootPath%%rootName%"
- goto bof
-
- ::如果%input%是个单独文件就原封不动传递给:del处理
- :file
- echo Deleting [%input%]
- call :myDel %input%
- goto bof
-
- ::这里定义了一个名叫:myDel的label,负责把参数传递的目标文件进行清0运算并随机重命名
- :myDel
- for /f "delims=" %%I in ("%~1") do set delPath=%%~dpI
- copy nul "%~1" >nul 2>nul
- set newName=%random%_%random%.%random%
- ren "%~1" %newName%
- del "%delPath%%newName%"
- exit/b
-
- ::定义了个名为:myRen的label,负责为文件夹改名
- :myRen
- ren "%~1" %random%_%random%.%random%
- exit/b
-
- ::名为:rootRen的label,负责为主目录改名,并生成新的路径信息。
- :rootRen
- set rootName=%random%.%random%_%random%
- for /f "delims=" %%I in ("%~1") do set rootPath=%%~dpI
- ren "%~1" %rootName%
- exit/b
复制代码
[ 本帖最后由 TX_kakashi 于 2010-8-4 18:35 编辑 ] |