Board logo

标题: [文本处理] 【已结】续前贴 让 dir 按指定方式来输出内容 [打印本页]

作者: ganjie    时间: 2009-1-22 10:39     标题: 【已结】续前贴 让 dir 按指定方式来输出内容

前些日子小弟发了个贴   http://www.bathome.net/thread-2951-1-1.html这是读取当前文件夹下的文件名,代码已经得到解决!现在因为个人需要改成读取当前目录下所有文件夹里的内容,生成的文本保存在个自的文件夹下%%k\%%i.txt
@echo off
setlocal enabledelayedexpansion
set "route=%cd%"
for /f "delims=" %%k in ('dir /ad /b "%route%"') do (
for /f "delims=" %%i in ('dir /b /a-d %%k\*.jpg') do (
…………………………
…………………………


小弟自己改了多次,可是总是得不到想要的结果,如有两个文件夹psp(假设文件为1、2、……)、nds(A、B、……),
nds内生成nds1.txt
<var>A</var> <var>B</var> <var>C</var>
nds2.txt
<var>A</var> <var>B</var> <var>C</var>
psp内生成psp1.txt
却是<var>Z</var> <var>1</var> <var>2</var>
应是与nds内的文件无关,如下
<var>1</var> <var>2</var> <var>3</var>
求大大们帮忙编个批,谢谢!
作者: pusofalse    时间: 2009-1-22 21:07

  1. @echo Off
  2. For /d %%a in (*) do (
  3.        For %%d in ("%%a\*") do (
  4.               If "%%~xd" neq "._False" (
  5.                   set /p=^<var^>%%~nxd^</var^> <nul>>"%%a\%%~nxa._False"
  6.               )
  7.        )
  8.        Ren "%%a\*._False", "*.txt"
  9. )
  10. Pause>nul
复制代码

[ 本帖最后由 pusofalse 于 2009-1-22 21:09 编辑 ]
作者: ganjie    时间: 2009-1-22 21:34

看了版主的代码,我就觉得有问题了,试测了一下,看来版主并没有仔细看明白小弟所写的意思!
作者: terse    时间: 2009-1-23 00:43

  1. @echo off&setlocal enabledelayedexpansion
  2. for /d  %%a in (*) do (
  3.    for /f "delims=" %%i in ('dir /b /a-d "%%a\*.jpg"') do (   
  4.       if defined str2 (
  5.       >"%%a\!str!.txt" echo ^<var^>!str1!^</var^> ^<var^>!str!^</var^> ^<var^>%%~ni^</var^>
  6.     ) else (
  7.       if defined str1 (
  8.       >"%%a\!str1!.txt" echo ^<var^>!str1!^</var^> ^<var^>!str!^</var^> ^<var^>%%~ni^</var^>
  9.       >"%%a\!str!.txt" echo ^<var^>!str1!^</var^> ^<var^>!str!^</var^> ^<var^>%%~ni^</var^>
  10.     ) else (
  11.       if defined str (
  12.       >"%%a\!str!.txt" echo ^<var^>!str!^</var^> ^<var^>%%~ni^</var^>
  13.       >"%%a\!%%~ni.txt" echo ^<var^>!str!^</var^> ^<var^>%%~ni^</var^>
  14.     ) else >"%%a\%%~ni.txt" echo ^<var^>%%~ni^</var^>
  15.   )
  16. )
  17.       set "str2=!str1!"
  18.       set "str1=!str!"
  19.       set str=%%~ni
  20. )
  21. if defined str2 >"%%a\!str!.txt" echo ^<var^>!str2!^</var^> ^<var^>!str1!^</var^> ^<var^>!str!^</var^>
  22. for %%i in (str str1 str2) do set "%%i="
  23. )
  24. pause
复制代码

[ 本帖最后由 terse 于 2009-1-23 12:58 编辑 ]
作者: ganjie    时间: 2009-1-23 07:53

感谢terse大大的代码,上次小弟发的那个贴也是由您解决的,测试了一下,结果发现一个问题,比如说在当前目录下的众多文件夹中,有三个或三个文件以上的均无问题,但若文件夹内只有两个文件或是只有一个时,便出错了,如下:
当有两个文件时,生成A.txt、B.txt
A.txt    <var></var> <var>A</var> <var>B</var>
B.txt    <var></var> <var>A</var> <var>B</var>
小弟想要的结果应是
A.txt   <var>A</var> <var>B</var>
B.txt   <var>A</var> <var>B</var>


当只有一个文件时,生成.txt、A.txt
.txt  <var></var> <var></var> <var>A</var>
A.txt <var></var> <var></var> <var>A</var>

结果应是只有一个A.txt
A.txt <var>A</var>

请大大再帮忙修改一下,谢谢!
作者: terse    时间: 2009-1-23 12:52

上面已修正了 再试呢?
作者: ganjie    时间: 2009-1-23 13:40

测试了,效果非常的好,测试中的文件均无问题了,谢谢大大了,但现在又出现一个问题,假如把您上面的代码改为@echo off&setlocal enabledelayedexpansion
for /d %%a in (*) do (
for /f "delims=" %%i in ('dir /b /a-d "%%a\*.jpg"') do (
if defined str2 (
>>"%%a\!str!.txt" echo ^!str1!^ ^!str!^ ^%%~ni^
) else (
if defined str1 (
>>"%%a\!str1!.txt" echo ^!str1!^ ^!str!^ ^%%~ni^
>>"%%a\!str!.txt" echo ^!str1!^ ^!str!^ ^%%~ni^
) else (
if defined str (
>>"%%a\!str!.txt" echo ^!str!^ ^%%~ni^
>>"%%a\!%%~ni.txt" echo ^!str!^ ^%%~ni^
) else >>"%%a\%%~ni.txt" echo ^%%~ni^
)
)
set "str2=!str1!"
set "str1=!str!"
set str=%%~ni
)
if defined str2 >>"%%a\!str!.txt" echo ^!str2!^ ^!str1!^ ^!str!^
for %%i in (str str1 str2) do set "%%i="
)
pause

注意上面代码中的红色部分,因为我有时需时添加入某个文本中,如果使用>就会删掉原来的内容了,而改成>>又会变成如下问题:
当文件夹内只有一个文件时,无事,生成A.txt     <var>A</var>

当文件夹内有二个文件时,生成 A.txt B.txt   
A.txt (这个就错了,多了一行,红色部分)
<var>A</var>
<var>A</var> <var>B</var>


B.txt (这个对)
<var>A</var> <var>B</var>

当文件夹内有三个或三个以上的文件时,生成 A.txt B.txt  C.txt D.txt………………
A.txt (这个就错了,多了二行,红色部分)
<var>A</var>
<var>A</var> <var>B</var>

<var>A</var> <var>B</var> <var>C</var>

B.txt (这个就错了,多了一行,红色部分)
<var>A</var> <var>B</var>
<var>A</var> <var>B</var> <var>C</var>

而后面的C.txt D.txt ………… 均正确
我想把> 改成>> 那将如何修改代码?

[ 本帖最后由 ganjie 于 2009-1-23 16:03 编辑 ]
作者: terse    时间: 2009-1-25 15:22

  1. @echo off&setlocal enabledelayedexpansion
  2. set v=^<var^>
  3. set v1=^</var^>
  4. for /d  %%a in (*) do (
  5.    for /f "delims=" %%i in ('dir /b /a-d "%%a\*.jpg"') do (
  6.       if defined str2 (
  7.       >>"%%a\!str!.txt" echo !v!!str1!!v1! !v!!str!!v1! !v!%%~ni!v1!
  8.     ) else (
  9.       if defined str1 (
  10.          set var1=!str1!
  11.          set var2=!str!
  12.          set .!var1!=!v!!str1!!v1! !v!!str!!v1! !v!%%~ni!v1!
  13.        ) else (
  14.       if defined str (
  15.          set var1=!str!
  16.          set var2=%%~ni
  17.          set .!var1!=!v!!var1!!v1! !v!%%~ni!v1!
  18.        ) else set var1=%%~ni&set .!var1!=!v!%%~ni!v1!
  19.    )
  20. )
  21.          set "str2=!str1!"
  22.          set "str1=!str!"
  23.          set str=%%~ni
  24. )
  25. if defined str2 >>"%%a\!str!.txt" echo !v!!str2!!v1! !v!!str1!!v1! !v!!str!!v1!
  26. call :lp "%%a"
  27. for %%i in (str str1 str2 var1 var2) do set "%%i="
  28. )
  29. pause&goto :eof
  30. :lp
  31. if defined var1 >>"%~1\%var1%.txt" echo !.%var1%!
  32. if defined var2 >>"%~1\%var2%.txt" echo !.%var1%!
  33. goto:eof
复制代码

作者: ganjie    时间: 2009-1-27 08:57

谢谢了,目前测试的文件中还未有问题,以后有问题了再来询问哦,呵呵!
if defined str1 (
         set var1=!str1!
         set var2=!str!
         set .!var1!=!v!!str1!!v1! !v!!str!!v1! !v!%%~ni!v1!

这句如何理解,特别是set. 这个为何要带个点?

[ 本帖最后由 ganjie 于 2009-1-27 09:11 编辑 ]




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