Board logo

标题: [文件操作] 【练习-024】批处理整理文件夹 [打印本页]

作者: batman    时间: 2008-9-24 09:59     标题: 【练习-024】批处理整理文件夹

出题目的:
  通过解题灵活了解并掌握文件处理技巧
加分原则:
  1 思路新颖基分5分
  2 代码高效基分4分
  3 代码简洁基分3分
  4 代码通用基分2分
  5 无临时文件基分1分
  6 完美代码加15分
题目如下:
  有个文件夹test,内有bmp、txt、bat文件若干,其中有批处理文件test.bat(见图一),
而且txt文件中内容相似(见图二),要求运行test.bat将文件夹中所有的bmp文件按照数字
顺序重命名为jpg文件,同时将所有的txt文件合成为一个new.txt文件,并将其它的bat文件删
除(见图三)。
图一
[attach]377[/attach]
图二
表一.txt
  1. 494088 后付 133.25 0102968
  2. 493698 后付 224.57 0100335
  3. 395999 后付 273.62 0099321
  4. 612520 后付 187.65 0099041
  5. 612491 后付 130.63 0098080
  6. 626600 后付 145.11 0096546
  7. 618432 后付 284.2 0096239
  8. 615279 后付 119.84 0095231
  9. 622966 后付 169.68 0092673
  10. 618529 后付 147.9 0092283
  11. 628222 后付 137.28 0090872
  12. 492886 后付 123.73 0090815
  13. 610362 后付 137.15 0089407
  14. 612763 后付 202.06 0088647
  15. 620589 后付 127.68 0088365
复制代码
表二.txt
  1. 343262 后付 131.53 0086329
  2. 618776 后付 153.28 0085317
  3. 619570 后付 252.39 0084439
  4. 618483 后付 351.45 0081672
  5. 625811 后付 172.05 0081529
  6. 618500 后付 187.7 0081528
  7. 611873 后付 227.85 0079577
  8. 619956 后付 106.04 0077187
  9. 612056 后付 110.69 0077183
  10. 493133 后付 164.62 0076405
  11. 394888 后付 258.5 0076298
  12. 629606 后付 122.31 0072679
  13. 690006 后付 134.3 0072228
  14. 626701 后付 307.44 0071388
  15. 611456 后付 102.45 0070326
  16. 355327 后付 206.24 0069721
  17. 620328 后付 111.79 0068989
  18. 259899 后付 116.35 0068563
复制代码
表三.txt
  1. 211118 后付 253.01 0067607
  2. 627578 后付 135.44 0066181
  3. 297315 后付 231.1 0065231
  4. 621628 后付 359.76 0064715
  5. 618428 后付 1088.61 0061200
  6. 617351 后付 458.5 0061199
  7. 396268 后付 334.67 0060623
  8. 631772 后付 157.91 0058373
  9. 610859 后付 103.05 0057156
  10. 672123 后付 180.48 0054423
  11. 210009 后付 270.98 0054200
  12. 298918 后付 227.17 0053451
  13. 396038 后付 592.88 0053417
  14. 618999 后付 628.64 0053217
  15. 616188 后付 138 0051053
复制代码
图三
[attach]379[/attach]
new.txt
  1. 211118 后付 253.01 0067607
  2. 627578 后付 135.44 0066181
  3. 297315 后付 231.1 0065231
  4. 621628 后付 359.76 0064715
  5. 618428 后付 1088.61 0061200
  6. 617351 后付 458.5 0061199
  7. 396268 后付 334.67 0060623
  8. 631772 后付 157.91 0058373
  9. 610859 后付 103.05 0057156
  10. 672123 后付 180.48 0054423
  11. 210009 后付 270.98 0054200
  12. 298918 后付 227.17 0053451
  13. 396038 后付 592.88 0053417
  14. 618999 后付 628.64 0053217
  15. 616188 后付 138 0051053
  16. 494088 后付 133.25 0102968
  17. 493698 后付 224.57 0100335
  18. 395999 后付 273.62 0099321
  19. 612520 后付 187.65 0099041
  20. 612491 后付 130.63 0098080
  21. 626600 后付 145.11 0096546
  22. 618432 后付 284.2 0096239
  23. 615279 后付 119.84 0095231
  24. 622966 后付 169.68 0092673
  25. 618529 后付 147.9 0092283
  26. 628222 后付 137.28 0090872
  27. 492886 后付 123.73 0090815
  28. 610362 后付 137.15 0089407
  29. 612763 后付 202.06 0088647
  30. 620589 后付 127.68 0088365
  31. 343262 后付 131.53 0086329
  32. 618776 后付 153.28 0085317
  33. 619570 后付 252.39 0084439
  34. 618483 后付 351.45 0081672
  35. 625811 后付 172.05 0081529
  36. 618500 后付 187.7 0081528
  37. 611873 后付 227.85 0079577
  38. 619956 后付 106.04 0077187
  39. 612056 后付 110.69 0077183
  40. 493133 后付 164.62 0076405
  41. 394888 后付 258.5 0076298
  42. 629606 后付 122.31 0072679
  43. 690006 后付 134.3 0072228
  44. 626701 后付 307.44 0071388
  45. 611456 后付 102.45 0070326
  46. 355327 后付 206.24 0069721
  47. 620328 后付 111.79 0068989
  48. 259899 后付 116.35 0068563
复制代码

[ 本帖最后由 batman 于 2008-9-24 11:55 编辑 ]
作者: Batcher    时间: 2008-9-24 10:04

不是说重命名为jpg文件吗,怎么你的截图还是bmp文件?
作者: pusofalse    时间: 2008-9-24 11:27

表二、表三 怎么没了?~建议BATMAN兄把三个文本的内容直接复制上来好了~既能节省论坛空间,接题人也可不必一个一个自己生成三个文件。
作者: shqf    时间: 2008-9-24 20:57

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd 4>new.txt
  4. set n=0
  5. for /f "delims=" %%a in ('dir /b *.txt') do (
  6. copy new.txt+%%a new1.txt
  7. del %%a
  8. del new.txt
  9. ren new1.txt new.txt
  10. echo.>>new.txt
  11. )
  12. for /f "delims=" %%a in ('dir /b *.bmp') do (
  13. set /a n+=1
  14. ren %%a !n!.jpg
  15. )
  16. for /f "delims=" %%a in ('dir /b *.bat') do (
  17. if not "%%a"=="test.bat" del %%a
  18. )
复制代码

作者: batman    时间: 2008-9-24 21:14

楼上的三个for是不是可以合为一个for再将代码简化点就ok了。
作者: shqf    时间: 2008-9-24 21:51

是啊,可以合在一起,怎一时每想到呢?多谢。简化如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd 4>new.txt
  4. set n=0
  5. for %%i in (txt bmp bat) do (
  6.         for /f "delims=" %%a in ('dir /b *.%%i') do (
  7.                 if "%%i"=="txt" (copy new.txt+%%a new1.txt
  8.                         del %%a
  9.                         del new.txt
  10.                         ren new1.txt new.txt
  11.                         echo.>>new.txt)
  12.                 if "%%i"=="bmp" (set /a n+=1&ren %%a !n!.jpg)
  13.                 if "%%i"=="bat" (if not "%%a"=="test.bat" del %%a)
  14. ))
复制代码

[ 本帖最后由 shqf 于 2008-9-24 21:54 编辑 ]
作者: batman    时间: 2008-9-24 22:15

楼上还是多了个for..............
作者: terse    时间: 2008-9-24 22:25

应该可以一个 for
作者: zqz0012005    时间: 2008-9-24 22:37

for %%i in (txt bmp bat)
这个循环好委屈。。。
作者: terse    时间: 2008-9-24 23:34

我来一个
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b *.txt *.bmp *.bat') do (
  3.    if "%%~xi"==".txt" (type "%%i">>"new.txt"&echo.>>new.txt&del "%%i")else (
  4.       if "%%~xi"==".bmp" (set/a n+=1&ren "%%i" "!n!.jpg")else if not "%%i"=="%~nx0" del "%%i"
  5.    )
  6. )
  7. pause
复制代码

作者: batman    时间: 2008-9-25 08:04     标题: 现在给出本人的解

一个for三个if语句解决问题
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b') do (
  3.     if "%%~xi" equ ".bmp" set /a n+=1&ren %%i !n!.jpg
  4.     if "%%~xi" equ ".txt" type %%i>>new.txt&del /q %%i
  5.     if "%%~xi" equ ".bat" if "%%~ni" neq "%~n0" del /q %%i
  6. )
复制代码

[ 本帖最后由 batman 于 2008-9-25 08:07 编辑 ]
作者: shqf    时间: 2008-9-25 20:52

官场有语:摆平就是水平,看来在批处理中:思路就是水平。学习了!
作者: pusofalse    时间: 2008-9-26 02:32     标题: 回复 11楼 的帖子

if "%%~xi" equ ".txt" type %%i>>new.txt&del /q %%i
type多个文件时,首尾会连接为一行。




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