标题: [文件操作] 【练习-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- 494088 后付 133.25 0102968
- 493698 后付 224.57 0100335
- 395999 后付 273.62 0099321
- 612520 后付 187.65 0099041
- 612491 后付 130.63 0098080
- 626600 后付 145.11 0096546
- 618432 后付 284.2 0096239
- 615279 后付 119.84 0095231
- 622966 后付 169.68 0092673
- 618529 后付 147.9 0092283
- 628222 后付 137.28 0090872
- 492886 后付 123.73 0090815
- 610362 后付 137.15 0089407
- 612763 后付 202.06 0088647
- 620589 后付 127.68 0088365
复制代码
表二.txt- 343262 后付 131.53 0086329
- 618776 后付 153.28 0085317
- 619570 后付 252.39 0084439
- 618483 后付 351.45 0081672
- 625811 后付 172.05 0081529
- 618500 后付 187.7 0081528
- 611873 后付 227.85 0079577
- 619956 后付 106.04 0077187
- 612056 后付 110.69 0077183
- 493133 后付 164.62 0076405
- 394888 后付 258.5 0076298
- 629606 后付 122.31 0072679
- 690006 后付 134.3 0072228
- 626701 后付 307.44 0071388
- 611456 后付 102.45 0070326
- 355327 后付 206.24 0069721
- 620328 后付 111.79 0068989
- 259899 后付 116.35 0068563
复制代码
表三.txt- 211118 后付 253.01 0067607
- 627578 后付 135.44 0066181
- 297315 后付 231.1 0065231
- 621628 后付 359.76 0064715
- 618428 后付 1088.61 0061200
- 617351 后付 458.5 0061199
- 396268 后付 334.67 0060623
- 631772 后付 157.91 0058373
- 610859 后付 103.05 0057156
- 672123 后付 180.48 0054423
- 210009 后付 270.98 0054200
- 298918 后付 227.17 0053451
- 396038 后付 592.88 0053417
- 618999 后付 628.64 0053217
- 616188 后付 138 0051053
复制代码
图三
[attach]379[/attach]
new.txt- 211118 后付 253.01 0067607
- 627578 后付 135.44 0066181
- 297315 后付 231.1 0065231
- 621628 后付 359.76 0064715
- 618428 后付 1088.61 0061200
- 617351 后付 458.5 0061199
- 396268 后付 334.67 0060623
- 631772 后付 157.91 0058373
- 610859 后付 103.05 0057156
- 672123 后付 180.48 0054423
- 210009 后付 270.98 0054200
- 298918 后付 227.17 0053451
- 396038 后付 592.88 0053417
- 618999 后付 628.64 0053217
- 616188 后付 138 0051053
- 494088 后付 133.25 0102968
- 493698 后付 224.57 0100335
- 395999 后付 273.62 0099321
- 612520 后付 187.65 0099041
- 612491 后付 130.63 0098080
- 626600 后付 145.11 0096546
- 618432 后付 284.2 0096239
- 615279 后付 119.84 0095231
- 622966 后付 169.68 0092673
- 618529 后付 147.9 0092283
- 628222 后付 137.28 0090872
- 492886 后付 123.73 0090815
- 610362 后付 137.15 0089407
- 612763 后付 202.06 0088647
- 620589 后付 127.68 0088365
- 343262 后付 131.53 0086329
- 618776 后付 153.28 0085317
- 619570 后付 252.39 0084439
- 618483 后付 351.45 0081672
- 625811 后付 172.05 0081529
- 618500 后付 187.7 0081528
- 611873 后付 227.85 0079577
- 619956 后付 106.04 0077187
- 612056 后付 110.69 0077183
- 493133 后付 164.62 0076405
- 394888 后付 258.5 0076298
- 629606 后付 122.31 0072679
- 690006 后付 134.3 0072228
- 626701 后付 307.44 0071388
- 611456 后付 102.45 0070326
- 355327 后付 206.24 0069721
- 620328 后付 111.79 0068989
- 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
- @echo off
- setlocal enabledelayedexpansion
- cd 4>new.txt
- set n=0
- for /f "delims=" %%a in ('dir /b *.txt') do (
- copy new.txt+%%a new1.txt
- del %%a
- del new.txt
- ren new1.txt new.txt
- echo.>>new.txt
- )
- for /f "delims=" %%a in ('dir /b *.bmp') do (
- set /a n+=1
- ren %%a !n!.jpg
- )
-
- for /f "delims=" %%a in ('dir /b *.bat') do (
- if not "%%a"=="test.bat" del %%a
- )
复制代码
作者: batman 时间: 2008-9-24 21:14
楼上的三个for是不是可以合为一个for再将代码简化点就ok了。
作者: shqf 时间: 2008-9-24 21:51
是啊,可以合在一起,怎一时每想到呢?多谢。简化如下:- @echo off
- setlocal enabledelayedexpansion
- cd 4>new.txt
- set n=0
- for %%i in (txt bmp bat) do (
- for /f "delims=" %%a in ('dir /b *.%%i') do (
- if "%%i"=="txt" (copy new.txt+%%a new1.txt
- del %%a
- del new.txt
- ren new1.txt new.txt
- echo.>>new.txt)
- if "%%i"=="bmp" (set /a n+=1&ren %%a !n!.jpg)
- if "%%i"=="bat" (if not "%%a"=="test.bat" del %%a)
- ))
复制代码
[ 本帖最后由 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
我来一个- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b *.txt *.bmp *.bat') do (
- if "%%~xi"==".txt" (type "%%i">>"new.txt"&echo.>>new.txt&del "%%i")else (
- if "%%~xi"==".bmp" (set/a n+=1&ren "%%i" "!n!.jpg")else if not "%%i"=="%~nx0" del "%%i"
- )
- )
- pause
复制代码
作者: batman 时间: 2008-9-25 08:04 标题: 现在给出本人的解
一个for三个if语句解决问题- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b') do (
- if "%%~xi" equ ".bmp" set /a n+=1&ren %%i !n!.jpg
- if "%%~xi" equ ".txt" type %%i>>new.txt&del /q %%i
- if "%%~xi" equ ".bat" if "%%~ni" neq "%~n0" del /q %%i
- )
复制代码
[ 本帖最后由 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://bathome.net./) |
Powered by Discuz! 7.2 |