找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: necnec1

[文件操作] [已解决]批处理怎样靠CRC32校验来删除文件?

[复制链接]
发表于 2012-12-2 22:36:46 | 显示全部楼层
回复 29# namejm
传说中的前站长namejm居然现身了,罕见罕见!jm一向以严谨著称,见识了。。。
要规避findstr搜索字符串的特殊字符,是不是可以用/l参数?一个文件名包含在另一个文件名中的情况确实需要考虑,惭愧惭愧。。。

  1. @echo off
  2. md backup 2>nul
  3. ::将下一行的crc32.txt替换为实际的文件名
  4. (for /f "tokens=1*" %%a in (crc32.txt) do (
  5.   if defined %%a (echo,\%%b) else set %%a=1
  6. ))>a.txt
  7. dir /s /b /a-d>b.txt
  8. findstr /il /g:a.txt b.txt>c.txt
  9. for /f "delims=" %%a in (c.txt) do  move /y "%%a" backup\
  10. del a.txt b.txt c.txt
复制代码
发表于 2012-12-2 22:52:41 | 显示全部楼层
300万的文件要累死机器,刚开始很快,后面空间不足了当然慢了,如果有必要可以分成几部分处理。
发表于 2012-12-2 22:56:45 | 显示全部楼层
呵呵,如果真要提高效率的话
还是建议从获取校验码的那一步做起
用专门的命令行工具来生成含绝对路径的校验文件
剩下的事情就是对生成的校验文件根据验证码进行处理了
可以用专门的命令行工具filemd5.exe或fsum.exe来生成带绝对路径的校验码文件
发表于 2012-12-2 23:02:47 | 显示全部楼层
回复 31# weichenxiehou
如果只用findstr来做的话,还是需要对a.txt做特殊处理
比如在生成a.txt的时候,在每行行首都添加反斜杠 \
另外,还要给 findstr 添加 /e 参数
这样才能保证获取的字符串被限定在完整路径的最后一层,且等于最后一层的字符串
还需要特别注意的是,在 findstr 之前需要要在a.txt的最后一行添加一个空行
以防止 findstr /e 时不能获取到 a.txt 中的最后一行非空字符串
发表于 2012-12-3 00:32:22 | 显示全部楼层
回复 32# cjiabing


    你可以分别针对29楼和30楼的代码分析一下,看看哪里会导致空间(假设你指的是内存)问题。
发表于 2012-12-3 20:37:14 | 显示全部楼层
回复 35# Batcher


    你显然不知道我回答问题的出发点在那里,我针对的是26楼说的情况,而非29楼和30楼。楼主这么说:
BAT-VBS 你的批处理 我从中午12点半开始 到下午的6点半 执行了大概6万左右
刚开始速度还没到那种无法忍受的地步 到后来 几乎是越执行越慢 到6点半 果断放弃
如果20万的重复量的话 不知道1天跑不跑的完
为什么执行的效率越来越差?我不是从代码执行效率来说的,而仅仅是从电脑使用操作的角度来说的。我只能简单地说内存资源耗尽了,空间不足了,你真要我说个子丑寅卯来我也无能为力了,因为我非计算机专业,仅能从我十年使用电脑的经验做出这样粗浅的判断。
 楼主| 发表于 2012-12-4 00:51:03 | 显示全部楼层
weichenxiehou最后的代码 出现了和BAT-VBS 类似的瓶颈   都是6个多小时查找到6万左右 跑起来相当费力  CPU占用50% 内存只耗费不到19M  感觉不像是内存的问题 我是2G的内存 5300的U  应该还凑合吧
是不是CMD本身的限制
namejm 版主改写的批处理貌似运行了一闪而过  只有一个backup文件夹 里面没东西 软件也下了 是哪有问题?
 楼主| 发表于 2012-12-4 00:57:26 | 显示全部楼层
我现在是这么一个想法
文本文件A 内容如下
3eb27c6f  8026844.pdf
e259ce1a  8026845.pdf
e259ce1a  8026644.pdf
d85ec019  8026847.pdf
e84f9de0  8026848.pdf
我再弄一个文本文件B   将所有PDF的完整路径和名称用Everything导出来

用文本文件A 和文本文件B去做比较  得出重复文件的完整路径和名称  然后转移保存到文件夹 岂不是更快
发表于 2012-12-4 12:10:00 | 显示全部楼层
回复 37# necnec1


    不要双击运行。打开一个CMD窗口,去运行那个bat文件,看看报错信息是什么。
发表于 2012-12-4 12:10:49 | 显示全部楼层
回复 36# cjiabing


    从37楼来看,不是内存问题。
发表于 2012-12-4 20:38:10 | 显示全部楼层
本帖最后由 weichenxiehou 于 2012-12-4 20:46 编辑

回复 37# necnec1
我估计是因为用set定义了太多的变量,后面用if defined在如此之多的变量里面查找会比较吃力,可以先用sort排序,然后用一个变量来比较。

  1. @echo off&setlocal enabledelayedexpansion
  2. md backup 2>nul
  3. ::将下一行的crc32.txt替换为实际的文件名
  4. (for /f "tokens=1*" %%a in ('sort crc32.txt') do (
  5.   if %%a=="!str!" (echo,\%%b)
  6.   set "str=%%a"
  7. ))>a.txt
  8. dir /s /b /a-d>b.txt
  9. findstr /ile /g:a.txt b.txt>c.txt
  10. for /f "delims=" %%a in (c.txt) do  move /y "%%a" backup\
  11. del a.txt b.txt c.txt
复制代码
亲测,a.txt不额外加一空行不会出现jm说的最后一行不会当成搜索字符串的问题。
发表于 2012-12-5 11:46:16 | 显示全部楼层
回复 41# weichenxiehou


    是不是你用的操作系统跟他的不一样啊?是XP吗,还是Win7啊?
发表于 2012-12-5 19:09:36 | 显示全部楼层
回复 42# BAT-VBS
“他”是指谁?namejm?我用的win7,难道xp下面必须要在最后加空行,不知,我最开始用电脑就是从win7开始的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 20:34 , Processed in 0.020153 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表