Board logo

标题: [文件操作] 让 dir 按指定方式来输出内容 [打印本页]

作者: ganjie    时间: 2008-12-31 14:23     标题: 让 dir 按指定方式来输出内容

某文件夹下若干个文件,例如有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>

请注意看一下蓝色的部分,除了第一个和最后一个外,都是文本文件名的在中间,左边为按名称排序后的上一个右边为按名称排序后的下一个除第一个与最后一个外,如何才能实现这种效果,求高手帮编个批处理,谢谢!


弱弱再问几个dir的问题,望高手不厌其烦的指教一下!
某文件夹下目录AA、BB两个文件夹,每个目录里有5个文件和一个aa的文件夹,求如何才能使dir只显示AA、BB下的文件,而不用显示aa下的文件,问如何才能使dir只显示第一层子目录的文件,而其它层的子目录不用显示?

某文件夹下有若干个文件,用dir和echo时就显示全部的文件名了,但偶想按名称排序后只显示前面5个或3个文件的文件名,其余不显示,dir如何表达?

还有一个数字的排序,如文件名:1、01、001、2、02、002、3、03、003,想用dir使之排序为:1、2、3、01、02、03、001、002、003,问dir如何才得这种排序?
作者: terse    时间: 2008-12-31 19:52

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /a-d *.*^|find /i /v "%~nx0"') do (
  3.    set str2=!str1!
  4.    set str1=!var!
  5.    set var=%%~ni
  6.    if defined str2 (
  7.    if not defined var1 (
  8.    set "var1=!str2!"
  9.    >"!str2!.txt" echo ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^> ^^^<var^^^>%%~ni^^^</var^^^>
  10. ) else (
  11.    >"!str2!.txt" echo ^^^<var^^^>!var1!^^^</var^^^> ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^>
  12.    set "var1=!str2!"
  13.    set "var2=!var1!"
  14. )))
  15. >"!str1!.txt" echo ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^> ^^^<var^^^>!var!^^^</var^^^>
  16. >"!var!.txt" echo ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^> ^^^<var^^^>!var!^^^</var^^^>
  17. pause
复制代码
dir的问题
  1. for /f "delims=" %%i in ('dir /b /a-d') do (
  2.    set/a n+=1
  3.    echo %%i
  4.    if !n! gtr 5 goto :eof
  5. )
复制代码
排序
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /a-d') do (
  3. set str=//////////%%i
  4. set .!str:~-10! !random!=%%i
  5. )
  6. for /f "tokens=2 delims==" %%i in ('set .') do echo %%i
  7. pause
复制代码

作者: ganjie    时间: 2008-12-31 20:28

  1. for /f "delims=" %%i in ('dir /b /a-d') do (
  2. set/a n+=1
  3. echo %%i
  4. if !n! gtr 5 goto :eof
  5. )
复制代码

这个不能显示前5个吧!其它两个代码测试成功了,还有dir问题的第一问:某文件夹下目录AA、BB两个文件夹,每个目录里有5个文件和一个aa的文件夹,求如何才能使dir只显示AA、BB下的文件,而不用显示aa下的文件,问如何才能使dir只显示第一层子目录的文件,而其它层的子目录不用显示?
这条也请大大帮忙一下,谢谢了!
作者: terse    时间: 2008-12-31 23:00

原帖由 ganjie 于 2008-12-31 20:28 发表
for /f ...
... goto :eof
这个不能显示前5个吧!其它两个代码测试成功了,还有dir问题的第一问:某文件夹下目录AA、BB两个文件夹,每个目录 ...
  1. @echo off&setLocal enabLedeLayedexpansion
  2. for /f "delims=" %%i in ('dir /b /a-d') do (
  3.    set/a n+=1
  4.    echo %%i
  5.    if !n! geq 5 goto lp
  6. )
  7. :lp
  8. pause
复制代码

另外是否这个意图?
  1. @echo off
  2. set ph=c:test\某文件夹\
  3. for /f "delims=" %%i in ('dir /b /ad "%ph%\"') do dir /b /a-d "%ph%%%i\*.*"
  4. pause
复制代码

作者: ganjie    时间: 2009-1-1 08:01

经过测试代码均成功,谢谢了!
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /a-d *.*^|find /i /v "%~nx0"') do (
  3.    set str2=!str1!
  4.    set str1=!var!
  5.    set var=%%~ni
  6.    if defined str2 (
  7.    if not defined var1 (
  8.    set "var1=!str2!"
  9.    >"!str2!.txt" echo ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^> ^^^<var^^^>%%~ni^^^</var^^^>
  10. ) else (
  11.    >"!str2!.txt" echo ^^^<var^^^>!var1!^^^</var^^^> ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^>
  12.    set "var1=!str2!"
  13.    set "var2=!var1!"
  14. )))
  15. >"!str1!.txt" echo ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^> ^^^<var^^^>!var!^^^</var^^^>
  16. >"!var!.txt" echo ^^^<var^^^>!str2!^^^</var^^^> ^^^<var^^^>!str1!^^^</var^^^> ^^^<var^^^>!var!^^^</var^^^>
  17. pause
复制代码
set str2=!str1!
   set str1=!var!
   set var=%%~ni
这三个,为什么不能写成set var=%%~ni set str1=!var! set str2=!str1! 这样的倒序,想了解一下您编程的算法!还有%~nx0 为什么不写成%%~nx0   这个表示什么意思。

[ 本帖最后由 ganjie 于 2009-1-1 08:08 编辑 ]




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