Board logo

标题: [文件操作] [已解决]批处理用sdelete彻底删除文件时如何选多个文件或文件夹 [打印本页]

作者: qwertl    时间: 2009-7-20 12:48     标题: [已解决]批处理用sdelete彻底删除文件时如何选多个文件或文件夹

  1. @echo off
  2. echo 注意!彻底删除!  ①取消?请按Ctrl+c  ②确认?请按任意键
  3. echo 将删除目录或文件: %1
  4. pause >nul
  5. "sdelete.exe" -p 3 -s %1
  6. echo 结果如上,按任意键退出
  7. pause >nul
复制代码
看网上说明是将该批处理放在sendto目录,右键发送到该批处理进行删除操作,

但这个批处理同时只能发送一个文件或目录进行删除,要怎样可以选择多个文件或目录发送进行删除呢?
作者: tireless    时间: 2009-7-20 16:15

  1. @echo off
  2. if "%~1"=="" exit /b
  3. setlocal disabledelayedexpansion
  4. set a=%*
  5. setlocal enabledelayedexpansion
  6. set a=!a:"=!
  7. set a="!a: %~d1=" "%~d1!"
  8. setlocal disabledelayedexpansion
  9. echo 将彻底删除以下文件(夹): & echo/
  10. for %%? in (%a%) do echo %%?
  11. echo/ & set/p=【取消】请直接关闭,【继续】请按任意键. . .<nul & pause>nul
  12. for %%? in (%a%) do "sdelete.exe" -q -p 3 -s %%?>nul
  13. set/p=完成!按任意键退出. . .<nul & pause>nul
复制代码

作者: qwertl    时间: 2009-7-20 19:08     标题: 回复 2楼 的帖子

这个能讲解一下吗?不容易看懂!

要是能实现对所选文件随机重命名再删就更好,可以实现到吗?
作者: Batcher    时间: 2009-7-20 19:19     标题: 回复 3楼 的帖子

是为了防止数据恢复软件看到残留的文件名信息么?
作者: qwertl    时间: 2009-7-20 19:30

对!为了防止数据恢复软件看到残留的文件名信息。要是能实现对所选文件随机重命名再删就更好,可以实现到吗?
作者: tireless    时间: 2009-7-20 20:30

  1. @echo off
  2. if "%~1"=="" exit /b
  3. set a=%*
  4. set a=%a:"=%
  5. call set a="%%a: %~d1=" "%~d1%%"
  6. echo 将彻底删除以下文件(夹):
  7. echo/
  8. for %%? in (%a%) do echo %%?
  9. echo/
  10. set /p=【取消】请直接关闭,【继续】请按任意键. . . <nul
  11. pause>nul
  12. set name=.%random%.%random%
  13. for %%? in (%a%) do (
  14.   ren %%? %name%
  15.   "sdelete.exe" -q -p 3 -s "%%~dp?%name%">nul
  16. )
复制代码
%* 代表传递给批处理的所有参数。如:
D:\1,2.txt "D:\a b" D:\c

可以用 for %%a in (%*) do sdelete.exe -p 3 -s %%a 来删除。

但是,当路径中含有 , ; = 这三个符号时会出错。如上面的会被分为:
D:\1
2.txt
"D:\a b"
D:\c

给路径加上引号可以避免以上情况。

[ 本帖最后由 tireless 于 2009-7-21 00:09 编辑 ]
作者: qwertl    时间: 2009-7-20 20:56

谢谢了!批处理真是功能强大!只是自己学得东西太少了
作者: Batcher    时间: 2009-7-20 22:07

据说以下两个软件都可以连同文件名一起删掉:
East-Tec Eraser
UstraSentry
有兴趣的朋友不妨试试
作者: qwertl    时间: 2009-7-21 09:10

批处理才是高效实用的  

Batcher说的软件都是要收费的  ,有开源的吗
作者: qwertl    时间: 2009-7-22 11:46

set name=.%random%.%random%
for %%? in (%a%) do (
  ren %%? %name%
  "sdelete.exe" -q -p 3 -s "%%~dp?%name%">nul
)

还有个问题这个改名是将所有目录或文件改成了一个相同的随机数字为目录名或文件名,要怎样改成每个不同的随机名再删呢?

改成相同的一个随机名时经常会留有一两个文件删不完,因删除时要些时间,后面的命名操作则不成功,认为应是这个原因。
作者: tireless    时间: 2009-7-22 14:51

  1. @echo off
  2. if "%~1"=="" exit /b
  3. set a=%*
  4. set a=%a:"=%
  5. call set a="%%a: %~d1=" "%~d1%%"
  6. echo 将彻底删除以下文件(夹):
  7. echo/
  8. for %%? in (%a%) do echo %%?
  9. echo/
  10. set /p=【取消】请直接关闭,【继续】请按任意键. . . <nul
  11. pause>nul
  12. for %%? in (%a%) do (
  13.   set FilePath=%%~dp?
  14.   set OldName=%%~nx?
  15.   setlocal enabledelayedexpansion
  16.   set NewName=.!random!.!random!
  17.   ren "!FilePath!!OldName!" !NewName!
  18.   "sdelete.exe" -q -p 3 -s "!FilePath!!NewName!">nul
  19.   endlocal
  20. )
复制代码

作者: qwertl    时间: 2009-7-30 20:36

谢谢了!
试过有时在目录与文件同时选择会有删除不到的情况,不知是什么原因。
作者: tireless    时间: 2009-7-30 21:56     标题: 回复 12楼 的帖子

文件名中不能含有 ^&。这两个符号没办法避免,因为文件发送到批处理时这两个符号就会丢失。

[ 本帖最后由 tireless 于 2009-7-30 21:57 编辑 ]




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2