[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 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
复制代码
看得多说得多,远比不上写得多。

TOP

300万的文件要累死机器,刚开始很快,后面空间不足了当然慢了,如果有必要可以分成几部分处理。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

呵呵,如果真要提高效率的话
还是建议从获取校验码的那一步做起
用专门的命令行工具来生成含绝对路径的校验文件
剩下的事情就是对生成的校验文件根据验证码进行处理了
可以用专门的命令行工具filemd5.exe或fsum.exe来生成带绝对路径的校验码文件
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

回复 31# weichenxiehou
如果只用findstr来做的话,还是需要对a.txt做特殊处理
比如在生成a.txt的时候,在每行行首都添加反斜杠 \
另外,还要给 findstr 添加 /e 参数
这样才能保证获取的字符串被限定在完整路径的最后一层,且等于最后一层的字符串
还需要特别注意的是,在 findstr 之前需要要在a.txt的最后一行添加一个空行
以防止 findstr /e 时不能获取到 a.txt 中的最后一行非空字符串
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

回复 32# cjiabing


    你可以分别针对29楼和30楼的代码分析一下,看看哪里会导致空间(假设你指的是内存)问题。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 35# Batcher


    你显然不知道我回答问题的出发点在那里,我针对的是26楼说的情况,而非29楼和30楼。楼主这么说:
BAT-VBS 你的批处理 我从中午12点半开始 到下午的6点半 执行了大概6万左右
刚开始速度还没到那种无法忍受的地步 到后来 几乎是越执行越慢 到6点半 果断放弃
如果20万的重复量的话 不知道1天跑不跑的完
为什么执行的效率越来越差?我不是从代码执行效率来说的,而仅仅是从电脑使用操作的角度来说的。我只能简单地说内存资源耗尽了,空间不足了,你真要我说个子丑寅卯来我也无能为力了,因为我非计算机专业,仅能从我十年使用电脑的经验做出这样粗浅的判断。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

weichenxiehou最后的代码 出现了和BAT-VBS 类似的瓶颈   都是6个多小时查找到6万左右 跑起来相当费力  CPU占用50% 内存只耗费不到19M  感觉不像是内存的问题 我是2G的内存 5300的U  应该还凑合吧
是不是CMD本身的限制
namejm 版主改写的批处理貌似运行了一闪而过  只有一个backup文件夹 里面没东西 软件也下了 是哪有问题?

TOP

我现在是这么一个想法
文本文件A 内容如下
3eb27c6f  8026844.pdf
e259ce1a  8026845.pdf
e259ce1a  8026644.pdf
d85ec019  8026847.pdf
e84f9de0  8026848.pdf
我再弄一个文本文件B   将所有PDF的完整路径和名称用Everything导出来

用文本文件A 和文本文件B去做比较  得出重复文件的完整路径和名称  然后转移保存到文件夹 岂不是更快

TOP

回复 37# necnec1


    不要双击运行。打开一个CMD窗口,去运行那个bat文件,看看报错信息是什么。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 36# cjiabing


    从37楼来看,不是内存问题。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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说的最后一行不会当成搜索字符串的问题。
看得多说得多,远比不上写得多。

TOP

回复 41# weichenxiehou


    是不是你用的操作系统跟他的不一样啊?是XP吗,还是Win7啊?

TOP

回复 42# BAT-VBS
“他”是指谁?namejm?我用的win7,难道xp下面必须要在最后加空行,不知,我最开始用电脑就是从win7开始的。
看得多说得多,远比不上写得多。

TOP

返回列表