[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1、用批处理做整个分区的搜索,速度将十分缓慢,特别是存在大量文件夹或文件的时候;
  2、移动到同一分区中,很可能造成重复搜索;

  至于批处理能否解决你的问题,答案是肯定的,但是,因为以上两个不利因素,整理的速度将会极其缓慢,需要你更换整理方案。

  推测你是想把散布在E盘不同位置上的所有pdf文件都集中放到指定的文件夹下,而所有的pdf文件的名字都是比较有规律的,而1.txt中的内容就是pdf文件的名字,不知道这个推测是否正确。如果这个推测正确的话,其实可以不用1.txt文件就可以做到,并且效率比较高,但是需要你用尽可能准确的语言去描述文件的位置、文件名的规律及你的意图,并尽量不要限制解决方案,比如说一定要通过1.txt中的内容去搜索E盘。

  请在顶楼更新你的需求,以方便大家写代码。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  疑问1:“D:/pdf文件夹含有如下pdf(目录文件列表1.txt)”,下面列举的究竟是文件名还是文件夹名?你所说的“目录文件”四字让人疑窦重重;
  疑问2:“E盘可能有文件名包括6090879等的文件”,这个6090879是指6090879.pdf还是指只要文件名中含有6090879字符串的pdf文件或所有文件都算在内?
  疑问3:如果只要包含有6090879这个字符串的文件都算在内,是否会有多个文件?

  建议:复杂需求请尽量用准确的语言描述清楚,不要用似是而非或自相矛盾的词汇让别人产生歧义。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  是必须在pdf文件名中包含还是所有类型的文件名中包含都算?

  另:E盘的路径中是否包含有特殊字符?如&、!。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  只要不包含&和!就可以。

  假设E盘所有路径中,.pdf只是后缀名,而不可能出现在文件夹名和文件名中,那么,把如下代码放在与1.txt相同的路径下运行即可。

  考虑到效率问题,生成了临时文件list.txt,请自行删除;若屏幕提示的内容与你的预期吻合,请把 echo 把 d:/pdf/%%i.pdf 移动到 "%%~dpk"  替换为 move d:/pdf/%%i.pdf "%%~dpk" (代码未经测试,请先测试后再修改):
  1. @echo off
  2. echo 全盘扫描E盘下的pdf文件,请耐心等待...
  3. cd.>list.txt
  4. for /f "delims=" %%i in ('dir /a-d /b /s e:\*.pdf 2^>nul') do (echo %%i)>>list.txt
  5. echo.>>list.txt
  6. cls
  7. for /f "delims=" %%i in (1.txt) do (
  8.     for /f "tokens=2 delims==-" %%j in ("%%i") do (
  9.         for /f "delims=" %%k in ('findstr /iec:"%%j.pdf" list.txt 2^>nul') do (
  10.             echo 把 d:/pdf/%%i.pdf 移动到 "%%~dpk"
  11.         )
  12.     )
  13. )
  14. pause
复制代码


————————————————————————————————————
d:/pdf/%%i.pdf 应为 d:\pdf\%%i.pdf ,本机路径用反斜杠而非斜杠,特此更正。
                         ——namejm 2008.11.25
1

评分人数

    • CrLf: 乐于助人技术 + 1
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

原帖由 lxh623 于 2008-11-25 08:15 发表
我用一个pdf做实验。
把 echo 把 d:/pdf/%%i.pdf 移动到 "%%~dpk"  替换为 move d:/pdf/%%i.pdf "%%~dpk"
说“语法错误”。
把 把 d:/pdf/%%i.pdf 移动到 "%%~dpk"  替换为 move d:/pdf/%%i.pdf "%%~dpk"
没有 ...

  不好意思,本机路径中应该是反斜杠而不是斜杠,是我把路径写错了,d:/pdf/%%i.pdf 应该是 d:\pdf\%%i.pdf ,请再次测试。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

RE terse:

  /iec:"%%j.pdf"   不能用  /ic:"%%j",因为必须保证.pdf出现在路径的末尾,若有 e:\test.pdf.txt 之类的路径就不是楼主所想要的了。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  嘿嘿,for用习惯了,容易造成思维定势,连dir列文件路径的时候都忍不住要for一把,还是terse直接dir更有效率。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

返回列表