Board logo

标题: [文件操作] 删除多个文件时(30个以上)批处理出错,是什么原因? [打印本页]

作者: qwertl    时间: 2009-12-23 15:17     标题: 删除多个文件时(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. 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. )
复制代码

以上tireless提供的代码每次在选很多文件时发送到这个批处理时会出现如附件所示出错信息,但选10多个文件时不会有这情况。
[attach]2126[/attach]

[ 本帖最后由 qwertl 于 2009-12-24 09:05 编辑 ]
作者: zqz0012005    时间: 2009-12-23 21:57

与批处理无关,可能是操作系统的Bug,命令行太长所致。
或许是一个缓冲区溢出漏洞?
作者: qwertl    时间: 2009-12-24 09:00     标题: 回复 2楼 的帖子

能怎样通过批处理分批按一定文件数量来来处理吗?

[ 本帖最后由 qwertl 于 2009-12-24 09:13 编辑 ]
作者: keen    时间: 2009-12-24 13:27     标题: 回复 2楼 的帖子

我猜测是:
set a=%*接受参数的个数大概是33个左右,导致的。
也就是说,参数不能超过33,如果超过就会弹出楼主所贴的附件中的图。
作者: qwertl    时间: 2009-12-24 16:04

怎样改进批处理可以避免这个限制?
作者: zqz0012005    时间: 2009-12-24 16:23     标题: 回复 4楼 的帖子

说了不是批处理的问题。
选中大量文件随便拖到一个什么程序上,都是一样的错误。




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