标题: [文本处理] 【已结】续前贴 让 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
- @echo Off
- For /d %%a in (*) do (
- For %%d in ("%%a\*") do (
- If "%%~xd" neq "._False" (
- set /p=^<var^>%%~nxd^</var^> <nul>>"%%a\%%~nxa._False"
- )
- )
- Ren "%%a\*._False", "*.txt"
- )
- Pause>nul
复制代码
[ 本帖最后由 pusofalse 于 2009-1-22 21:09 编辑 ]
作者: ganjie 时间: 2009-1-22 21:34
看了版主的代码,我就觉得有问题了,试测了一下,看来版主并没有仔细看明白小弟所写的意思!
作者: terse 时间: 2009-1-23 00:43
- @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 ^<var^>!str1!^</var^> ^<var^>!str!^</var^> ^<var^>%%~ni^</var^>
- ) else (
- if defined str1 (
- >"%%a\!str1!.txt" echo ^<var^>!str1!^</var^> ^<var^>!str!^</var^> ^<var^>%%~ni^</var^>
- >"%%a\!str!.txt" echo ^<var^>!str1!^</var^> ^<var^>!str!^</var^> ^<var^>%%~ni^</var^>
- ) else (
- if defined str (
- >"%%a\!str!.txt" echo ^<var^>!str!^</var^> ^<var^>%%~ni^</var^>
- >"%%a\!%%~ni.txt" echo ^<var^>!str!^</var^> ^<var^>%%~ni^</var^>
- ) else >"%%a\%%~ni.txt" echo ^<var^>%%~ni^</var^>
- )
- )
- set "str2=!str1!"
- set "str1=!str!"
- set str=%%~ni
- )
- if defined str2 >"%%a\!str!.txt" echo ^<var^>!str2!^</var^> ^<var^>!str1!^</var^> ^<var^>!str!^</var^>
- for %%i in (str str1 str2) do set "%%i="
- )
- 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
- @echo off&setlocal enabledelayedexpansion
- set v=^<var^>
- set v1=^</var^>
- for /d %%a in (*) do (
- for /f "delims=" %%i in ('dir /b /a-d "%%a\*.jpg"') do (
- if defined str2 (
- >>"%%a\!str!.txt" echo !v!!str1!!v1! !v!!str!!v1! !v!%%~ni!v1!
- ) else (
- if defined str1 (
- set var1=!str1!
- set var2=!str!
- set .!var1!=!v!!str1!!v1! !v!!str!!v1! !v!%%~ni!v1!
- ) else (
- if defined str (
- set var1=!str!
- set var2=%%~ni
- set .!var1!=!v!!var1!!v1! !v!%%~ni!v1!
- ) else set var1=%%~ni&set .!var1!=!v!%%~ni!v1!
- )
- )
- set "str2=!str1!"
- set "str1=!str!"
- set str=%%~ni
- )
- if defined str2 >>"%%a\!str!.txt" echo !v!!str2!!v1! !v!!str1!!v1! !v!!str!!v1!
- call :lp "%%a"
- for %%i in (str str1 str2 var1 var2) do set "%%i="
- )
- pause&goto :eof
- :lp
- if defined var1 >>"%~1\%var1%.txt" echo !.%var1%!
- if defined var2 >>"%~1\%var2%.txt" echo !.%var1%!
- 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 |