![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 06:48 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 批量文件按名称排序并把文件名写入指定文件 |
| 可打印版本 1,877 / 12 |
| 第1楼 ganjie | 发表于 2009-01-05 23:51 |
| 初级用户 发帖 37 积分 49 | |
|
批量文件按名称排序并把文件名写入指定文件 某文件夹下若干个文件,例如有A至E 5个文件,按名称排序后读取文件名,把它们放入文本中,按文件名保存,如A就保存为A.txt,同理B就是B.txt,A.txt是第一个文件,内容为 <var>A</var> <var>B</var> <var>C</var>
B.txt 内容如下 <var>A</var> <var>B</var> <var>C</var> C.txt 内容如下 <var>B</var> <var>C</var> <var>D</var> D.txt 内容如下 <var>C</var> <var>D</var> <var>E</var> E.txt 内容如下 <var>C</var> <var>D</var> <var>E</var> 请注意看一下蓝色的部分,除了第一个和最后一个外,都是文本文件名的在中间,左边为按名称排序后的上一个,右边为按名称排序后的下一个,除第一个与最后一个外,下面的代码已经可以现实现在小弟想修改输出的内容 设A.txt为第一个文件,内容为 <var>A<tr>1</tr></var> <var>B<tr>2</tr></var><var>C<tr>3</tr></var> <var>B<tr>2</tr></var> B.txt 内容如下 <var>A<tr>1</tr></var> <var>A<tr>1</tr></var> <var>B<tr>2</tr></var> <var>C<tr>3</tr></var> <var>C<tr>3</tr></var> 同理 C.txt内容如下 <var>B<tr>0</tr></var> <var>A<tr>1</tr></var> <var>B<tr>2</tr></var> <var>C<tr>3</tr></var> <var>D<tr>4</tr></var> 但 D.txt内容有点变 <var>C<tr>3</tr></var> <var>D<tr>4</tr></var> <var>E<tr>5</tr> </var>var>F<tr>6</tr></var> <var>E<tr>5</tr></var> 注意黑色的部分 E.txt <var>D<tr>4</tr></var> <var>D<tr>4</tr></var> <var>E<tr>5</tr> </var>var>F<tr>6</tr></var> <var>F<tr>6</tr></var> F.txt <var>E<tr>5</tr></var> <var>D<tr>4</tr></var> <var>E<tr>5</tr> </var>var>F<tr>6</tr></var> <var>G<tr>7</tr></var> 可以看出A.txt和B.txt 、C.txt的黑色部分是ABC D.txt和E.txt、F.txt 的黑色部分是DEF 红色为上一个文件名 蓝色为下一个文件名 数字为文件名按名称排序后的序号 只有第一个和最后一个有特殊 假设Z.txt最后一个文件,其内容如下 <var>Y<tr>25</tr></var> <var>X<tr>24</tr></var><var>Y<tr>25</tr></var> <var>Z<tr>26</tr></var> [ Last edited by ganjie on 2009-1-5 at 23:53 ] |
|
| 第2楼 creda | 发表于 2009-01-06 12:39 |
| 新手上路 发帖 10 积分 12 | |
|
伙计能否告诉我,怎么读取文件夹中的文件名啊,再跟一个固定字符串进行判断。
比如 A文件夹 ,有 几个文件 ,让他们跟当前日期+0000 或当前日期+1200进行对比,如果对应就执行1 ,不对应执行2. |
|
| 第3楼 ahongguo | 发表于 2009-01-06 20:01 |
| 新手上路 发帖 7 积分 10 来自 河北沧州 | |
|
建议弄的字小一点不好吗 弄这大
|
|
| 第4楼 HAT | 发表于 2009-01-06 21:50 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 2楼 有问题请单独发帖提问,你在别人的帖子里面跟帖提问的话,很少有人能看到你的问题,愿意回答问题的就更少了。
|
|
| 第5楼 netbenton | 发表于 2009-01-08 00:57 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
搞了一天,终于好了!^_^
@echo off&setlocal enabledelayedexpansion echo #>%temp%\fs.tmp dir aa\*.* /b /a-d>>%temp%\fs.tmp echo #>>%temp%\fs.tmp type %temp%\fs.tmp set test=0 set n=0 set var=0 for /f "delims=" %%i in (%temp%\fs.tmp) do ( set "f5=!f4!"&set "e5=!e4!" set "f4=!f3!"&set "e4=!e3!" set "f3=!f2!"&set "e3=!e2!" set "f2=!f1!"&set "e2=!e1!" set f1=%%~ni if "%%i"=="#" (set e1=) else (set "e1=^<var^>!f1!^<tr^>!n!^</tr^>^</var^>") if !var! gtr !test! ( set test=!var! >!f4!.txt echo !e5!!e4!!e3!!e2!!e3! >!f3!.txt echo !e4!!e4!!e3!!e2!!e2! >!f2!.txt echo !e3!!e4!!e3!!e2!!e1! ) set /a var=n/3 set /a n+=1 ) set /a var=(n-2)%%3 if !var! gtr 1 echo !e4!!e4!!e3!!e2!!e2!>!f3!.txt if !var! gtr 0 echo !e3!!e4!!e3!!e2!!e1!>!f2!.txt dir *.txt del %temp%\fs.tmp pause [ Last edited by netbenton on 2009-1-8 at 01:01 ] |
|
| 第6楼 ganjie | 发表于 2009-01-08 18:10 |
| 初级用户 发帖 37 积分 49 | |
|
楼上的,我测试了,没有什么反应呀,提示说找不到文件,是不是你这个%temp%要改成%cd%,可是我改了后也没有测试成功!
|
|
| 第7楼 netbenton | 发表于 2009-01-09 01:02 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
改红色部分Originally posted by ganjie at 2009-1-8 18:10: @echo off&setlocal enabledelayedexpansion echo #>%temp%\fs.tmp dir aa\*.* /b /a-d>>%temp%\fs.tmp echo #>>%temp%\fs.tmp type %temp%\fs.tmp set test=0 set n=0 set var=0 在红色部分指明你的目录和文件 |
|
| 第8楼 ganjie | 发表于 2009-01-09 18:01 |
| 初级用户 发帖 37 积分 49 | |
|
经测试,输出文本的结果是我想要的内容,谢谢了,不过我不太理解您的编批算法和一些变量的意思,你能注释一下吗?授人鱼不如授人渔,烦麻一下!
|
|
| 第9楼 netbenton | 发表于 2009-01-09 21:18 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
@echo off&setlocal enabledelayedexpansion
echo #>%temp%\fs.tmp dir aa\*.* /b /a-d>>%temp%\fs.tmp echo #>>%temp%\fs.tmp type %temp%\fs.tmp ::a 以上取得排序后的目录列表,并在前后加"#", 在这里加pause可以看到结果 set test=0 set n=0 set var=0 for /f "delims=" %%i in (%temp%\fs.tmp) do ( ::b set "f5=!f4!"&set "e5=!e4!" set "f4=!f3!"&set "e4=!e3!" set "f3=!f2!"&set "e3=!e2!" set "f2=!f1!"&set "e2=!e1!" set f1=%%~ni ::b 文件名及备写内容数组,执行一次,递进一次(f1,e1)->f2,e2)->f3,e3)->f4,e4)->f5,e5) ::c if "%%i"=="#" (set e1=) else (set "e1=^<var^>!f1!^<tr^>!n!^</tr^>^</var^>") ::c 根据文件转化成备写内容,为#写入空,处理前后的特殊 :: d if !var! gtr !test! ( set test=!var! >!f4!.txt echo !e5!!e4!!e3!!e2!!e3! >!f3!.txt echo !e4!!e4!!e3!!e2!!e2! >!f2!.txt echo !e3!!e4!!e3!!e2!!e1! ) :: d 写入文件,三条一组 变量排列是按你的要求排的 ::e set /a var=n/3 ::e 只有是3的倍数,var才会发生改变 set /a n+=1 ) ::f 最后不足三条的,现在写入 set /a var=(n-2)%%3 if !var! gtr 1 echo !e4!!e4!!e3!!e2!!e2!>!f3!.txt if !var! gtr 0 echo !e3!!e4!!e3!!e2!!e1!>!f2!.txt dir *.txt del %temp%\fs.tmp pause |
|
| 第10楼 ganjie | 发表于 2009-01-09 21:56 |
| 初级用户 发帖 37 积分 49 | |
|
if "%%i"=="#" (set e1=) else (set "e1=^<var^>!f1!^<tr^>!n!^</tr^>^</var^>")
::c 根据文件转化成备写内容,为#写入空,处理前后的特殊 这句我不太理解,可以说得更详细吗? |
|
| 第11楼 netbenton | 发表于 2009-01-09 22:46 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
#是另外加入列表前后的,你要求的第一项和最后项不是特殊吗
set "e1=^<var^>!f1!^<tr^>!n!^</tr^>^</var^>" 和 set e1=^^^<var^^^>!f1!^^^<tr^^^>!n!^^^</tr^^^>^^^</var^^^> 的结果是一样的,你自己试试吧 再说下去我也说不出来了,水平有限 |
|
| 第12楼 ganjie | 发表于 2009-01-09 22:51 |
| 初级用户 发帖 37 积分 49 | |
|
#是另外加入列表前后的?是不是这就是第一个和最后要输出的内容,举个例子看看!还有test!代表什么? set /a var=(n-2)%%3这句,举个例子,想知道为何n-2,谢谢!
|
|
| 第13楼 netbenton | 发表于 2009-01-09 23:36 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
#就是辅助处理前后特殊的,并不会生成#.txt文件,
test变量是为了三个一组输出设置的,如:abc与def各自有特殊关系 !var!大于!test! 才输出,而 set /a var=n/3 随n的变化,会使 var 增加,n与var的关系如下 n var 0 0 1 0 3 1 4 1 6 2 set /a var=(n-2)%%3 取(n-2 )除以3的余数 就是用来处理不足一组的文件,因为在for里面是三个一组输出的,不足的还没有处理 至于n-2是因为在for里面是读到第四个文件时才有输出的,而输出后又加了1 如: 0 # 1 a 2 b 3 c 4 d 5 e 6 # n+1 7 for出来后n=7 但只有 (n-2)%%3 =2 项是需要输出的 所以要n-2 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |