|
ganjie
初级用户
积分 49
发帖 37
注册 2007-5-8
状态 离线
|
『楼 主』:
批量文件按名称排序并把文件名写入指定文件
某文件夹下若干个文件,例如有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>
请注意看一下蓝色的部分,除了第一个和最后一个外,都是文本文件名的在中间,左边为按名称排序后的上一个,右边为按名称排序后的下一个,除第一个与最后一个外,下面的代码已经可以现实
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d *.*^|find /i /v "%~nx0"') do (
set str2=!str1!
set str1=!var!
set var=%%~ni
if defined str2 (
if not defined var1 (
set "var1=!str2!"
>"!str2!.txt" echo ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^> ^^^<var^^^>%%~ni^^^</var^^^>
) else (
>"!str2!.txt" echo ^^^<var^^^>!var1!^^^</var^^^> ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^>
set "var1=!str2!"
set "var2=!var1!"
)))
>"!str1!.txt" echo ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^> ^^^<var^^^>!var!^^^</var^^^>
>"!var!.txt" echo ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^> ^^^<var^^^>!var!^^^</var^^^>
pause 现在小弟想修改输出的内容
设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 ]
|
|
2009-1-5 23:51 |
|
|
creda
新手上路
积分 12
发帖 10
注册 2008-12-30
状态 离线
|
『第
2 楼』:
伙计能否告诉我,怎么读取文件夹中的文件名啊,再跟一个固定字符串进行判断。
比如 A文件夹 ,有 几个文件 ,让他们跟当前日期+0000 或当前日期+1200进行对比,如果对应就执行1 ,不对应执行2.
|
|
2009-1-6 12:39 |
|
|
ahongguo
新手上路
积分 10
发帖 7
注册 2008-10-15 来自 河北沧州
状态 离线
|
『第
3 楼』:
建议弄的字小一点不好吗 弄这大
|
DOS下燃起火热的电脑人生 |
|
2009-1-6 20:01 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
4 楼』:
Re 2楼
有问题请单独发帖提问,你在别人的帖子里面跟帖提问的话,很少有人能看到你的问题,愿意回答问题的就更少了。
|
|
|
2009-1-6 21:50 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
5 楼』:
搞了一天,终于好了!^_^
@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 ]
|
|
2009-1-8 00:57 |
|
|
ganjie
初级用户
积分 49
发帖 37
注册 2007-5-8
状态 离线
|
『第
6 楼』:
楼上的,我测试了,没有什么反应呀,提示说找不到文件,是不是你这个%temp%要改成%cd%,可是我改了后也没有测试成功!
|
|
2009-1-8 18:10 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
7 楼』:
改红色部分
Quote: | Originally posted by ganjie at 2009-1-8 18:10:
楼上的,我测试了,没有什么反应呀,提示说找不到文件,是不是你这个%temp%要改成%cd%,可是我改了后也没有测试成功! |
|
@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
在红色部分指明你的目录和文件
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-9 01:02 |
|
|
ganjie
初级用户
积分 49
发帖 37
注册 2007-5-8
状态 离线
|
『第
8 楼』:
经测试,输出文本的结果是我想要的内容,谢谢了,不过我不太理解您的编批算法和一些变量的意思,你能注释一下吗?授人鱼不如授人渔,烦麻一下!
|
|
2009-1-9 18:01 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
9 楼』:
@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
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-9 21:18 |
|
|
ganjie
初级用户
积分 49
发帖 37
注册 2007-5-8
状态 离线
|
『第
10 楼』:
if "%%i"=="#" (set e1=) else (set "e1=^<var^>!f1!^<tr^>!n!^</tr^>^</var^>")
::c 根据文件转化成备写内容,为#写入空,处理前后的特殊
这句我不太理解,可以说得更详细吗?
|
|
2009-1-9 21:56 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
11 楼』:
#是另外加入列表前后的,你要求的第一项和最后项不是特殊吗
set "e1=^<var^>!f1!^<tr^>!n!^</tr^>^</var^>"
和
set e1=^^^<var^^^>!f1!^^^<tr^^^>!n!^^^</tr^^^>^^^</var^^^>
的结果是一样的,你自己试试吧
再说下去我也说不出来了,水平有限
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-9 22:46 |
|
|
ganjie
初级用户
积分 49
发帖 37
注册 2007-5-8
状态 离线
|
『第
12 楼』:
#是另外加入列表前后的?是不是这就是第一个和最后要输出的内容,举个例子看看!还有test!代表什么? set /a var=(n-2)%%3这句,举个例子,想知道为何n-2,谢谢!
|
|
2009-1-9 22:51 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
13 楼』:
#就是辅助处理前后特殊的,并不会生成#.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
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-9 23:36 |
|