中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 分割文件 并依据文本内容产生新的文件名? 已完成.
作者:
标题: 分割文件 并依据文本内容产生新的文件名? 已完成. 上一主题 | 下一主题
digitalchina
新手上路





积分 16
发帖 7
注册 2007-7-2
状态 离线
『楼 主』:  分割文件 并依据文本内容产生新的文件名? 已完成. 使用 LLM 解释/回答一下

写一段代码打算把文档TEST.LST 分割成 aaaaadb.bvbde.txt
和 %j.%b.txt
:D:D:D
%j %b 分别取自'File . . . . . . . . : , Library . . . . . . : 后的字符串.
以 * * * * * E N D O F L I S T I N G * * * * * 来分割文件.


我写了一小段想截取 %J 和%b 也不能成功, 不知道为什么.
rem @echo off
set fil=
set lib=
cd.>list.txt
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in (test.lst) do (
if /i "%%i"=="File . . . . . . . . :" set fil=%%j
if /i "%%i"==Library . . . . . . :" set lib=%%j
)
if "%fil%" neq "" echo !fil!>>list.txt
do ( if "%lib%" neq "" echo !lib!>>list.txt
echo %lib%.%fil%.txt
rem copy test.lst %lib%.%fil%.txt
)
pause


test.lst
---------------------------------------------------------------------------------------

999WWW VVVT50 930101 Programming Development TST - Member list 6/29/07 8:56:59 Page 1

File . . . . . . . . : aaaaadb
Library . . . . . . : bvbde
Member . . . . . . . : *ALL
Type . . . . . . . . : *ALL


Creation Last Changed Deleted
Member Type Date Date Time Records Records Text
---------- ---------- -------- -------- -------- ------- ------- ------------------------------------------------
A00001 CPP 01/12/02 01/18/03 08:00:50 0100005 0000000 MODIFY SEAR
A00002 C 01/13/02 01/16/03 08:00:50 0300000 0000000 modi file
AU0001 PAS 01/14/02 01/16/03 08:00:50 0000100 0000000 SEQUENTIAL READ library
ADDD01 VBS 01/15/02 01/16/03 08:00:50 0000210 0000000 SEARCH
SEAR02 BAT 01/16/02 01/16/03 08:00:50 0000003 0000000 SEARC
GETFILE FIL 01/17/02 01/16/03 08:00:51 0000007 0000000

* * * * * E N D O F L I S T I N G * * * * *


999WWW VVVT50 930101 Programming Development TST - Member list 6/29/07 8:56:59 Page 1

File . . . . . . . . : TTTDBGF
Library . . . . . . : LIBRARY
Member . . . . . . . : *ALL
Type . . . . . . . . : *ALL


Creation Last Changed Deleted
Member Type Date Date Time Records Records Text
---------- ---------- -------- -------- -------- ------- ------- ------------------------------------------------
BBB01 CPP 11/10/93 05/21/03 01:55:00 0000100 0000000 MODIFY SEAR
BBBD02 C 11/10/92 05/21/73 01:55:00 0000100 0000000 modi file
BBB PAS 11/10/95 05/11/83 01:55:00 0000100 0000000 SEQUENTIAL READ library
RRRR VBS 11/10/92 05/03/03 01:55:00 0000000 0000000 SEARCH
ASSSS BAT 11/10/95 03/15/93 01:55:00 0000004 0000000 SEARC
TTT01NF FIL 11/10/95 01/13/02 01:55:00 0000100 0000000 LIBRARY

999WWW VVVT50 930101 Programming Development TST - Member list 6/29/07 8:56:59 Page 2

File . . . . . . . . : TTTDBGF
Library . . . . . . : LIBRARY
Member . . . . . . . : *ALL
Type . . . . . . . . : *ALL


Creation Last Changed Deleted
Member Type Date Date Time Records Records Text
---------- ---------- -------- -------- -------- ------- ------- ------------------------------------------------
TGGG01 CPP 11/10/93 05/21/03 01:55:00 0000195 0000000 MOSAFWEFR
TUROB C 11/10/93 05/21/03 01:55:00 0000195 0000000 moASFEAWEF
BATCH PAS 11/10/93 05/21/03 01:55:00 0000115 0000000 SEQUENTIAL READ library
LIBRARY VBS 11/10/93 05/21/03 01:55:00 0000184 0000000 LIBRARY
FILE BAT 11/10/93 05/21/03 01:55:00 0000184 0000000 FILE
FILE01 FIL 11/10/93 05/21/03 01:55:00 0000117 0000000 FOLE


* * * * * E N D O F L I S T I N G * * * * *

Last edited by digitalchina on 2007-7-3 at 09:59 PM ]


2007-7-2 22:31
查看资料  发短消息  网志   编辑帖子  回复  引用回复
digitalchina
新手上路





积分 16
发帖 7
注册 2007-7-2
状态 离线
『第 2 楼』:  请指点. 使用 LLM 解释/回答一下

修改了一下可以分离出变量了, 但是 为什么会把文件读完才完成FOR语句?
我打算是读到 LIB FIL 有值了就退出. 但是好像没做用啊.

rem @echo off
set fil=
set lib=
for /f "tokens=1,2 delims=:" %%i in (test.lst) do (
if /i "%%i"== "File . . . . . . . . " if "%fil%"=="" set fil=%%j
if /i "%%i"== " Library . . . . . . " do ( if "%lib%"=="" set lib=%%j
if "%fil%" neq "" if "%lib%" neq "" goto end )

)
)



:end
echo %lib%.%fil%.txt
pause


2007-7-3 01:02
查看资料  发短消息  网志   编辑帖子  回复  引用回复
digitalchina
新手上路





积分 16
发帖 7
注册 2007-7-2
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

不会去空格了
rem @echo off
set fil=
set lib=
for /f "tokens=1,2 delims=:" %%i in (test.lst) do (
if /i "%%i"== "File . . . . . . . . " set fil=%%j & set strfil=%%j & call set "fil=%%fil%%: =%%"
if /i "%%i"== " Library . . . . . . " ( set lib=%%j & set strlib=%%j & call set "lib=%%lib%%: =%%"
if "%strfil%" neq "" if "%strlib%" neq "" goto end )
)
)



:end
echo %lib%.%fil%.txt
pause


2007-7-3 02:30
查看资料  发短消息  网志   编辑帖子  回复  引用回复
digitalchina
新手上路





积分 16
发帖 7
注册 2007-7-2
状态 离线
『第 4 楼』:  搞定了:) 使用 LLM 解释/回答一下

rem @echo off
set fil=
set lib=
for /f "tokens=1,2 delims=:" %%i in (test.lst) do (
if /i "%%i"== "File . . . . . . . . " set fil=%%j & set strfil=%%j & call set "fil=%%strfil: =%%"
if /i "%%i"== " Library . . . . . . " ( set lib=%%j & set strlib=%%j & call set "lib=%%strlib: =%%"
if "%strfil%" neq "" if "%strlib%" neq "" goto end )
)
)



:end
echo %lib%.%fil%.txt
pause

还差文件分割

Last edited by digitalchina on 2007-7-3 at 08:26 AM ]


2007-7-3 08:24
查看资料  发短消息  网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

提醒: 可以先输出到 临时文件夹;
遇到 * * * * * E N D O F L I S T I N G * * * * * 时;
把临时文件夹改名为: %lib%.%fil%.txt

顺便贴个awk的解决:
$ awk '/File/{name1=$NF};/Library/{name2=$NF};{if ( $0 ~ /E N D O F L I S T I N G/ ) {print $0>"temp.txt";close("temp.txt"); system("mv temp.txt "name1"."name2".txt");}else {print $0>"temp.txt"} }' 1.txt


2007-7-3 10:15
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
digitalchina
新手上路





积分 16
发帖 7
注册 2007-7-2
状态 离线
『第 6 楼』:  只差一步了。 使用 LLM 解释/回答一下

getname.bat
------------------------------------------------------------------------------
rem @echo off
copy tmp.lst temp.lst >nul 2>nul
set fil=
set lib=
for /f "tokens=1,2 delims=:" %%i in (temp.lst) do (
if /i "%%i"== "File . . . . . . . . " set fil=%%j & set strfil=%%j & call set "fil=%%strfil: =%%"
if /i "%%i"== " Library . . . . . . " set lib=%%j & set strlib=%%j & call set "lib=%%strlib: =%%"
if "%strfil%" neq "" if "%strlib%" neq "" goto end

)

:end
ren temp.lst %lib%.%fil%.lst >nul 2>nul
del temp.lst >nul 2>nul
del tmp.lst >nul 2>nul

split.bat
------------------------------------------------------------------
rem @echo off
for /f "tokens=1,* delims= " %%a in ('type job.all') do (
set a=%%a
echo %%a %%b>>tmp.lst
if "%%b"=="* * * * E N D O F L I S T I N G * * * * * " call getname

)



现在已经能用SPLIT 正确分割,GETNAME 获得正确的名字, 但是用SPLIT CALL GETNAME 就得不到正确的名字了。

有谁遇到过?


2007-7-3 10:20
查看资料  发短消息  网志   编辑帖子  回复  引用回复
digitalchina
新手上路





积分 16
发帖 7
注册 2007-7-2
状态 离线
『第 7 楼』:  终于成功了. 使用 LLM 解释/回答一下

getname.bat

@echo off
copy tmp.lst temp.lst >nul 2>nul
set blank=
set fil=%blank%
set lib=%blank%
for /f "tokens=1,2 delims=:" %%i in (temp.lst) do (
if /i "%%i"== "File . . . . . . . . " set fil=%%j & set strfil=%%j & call set "fil=%%

strfil: =%%"
if /i "%%i"== "Library . . . . . . " set lib=%%j & set strlib=%%j & call set "lib=%%

strlib: =%%"
if "%fil%" neq " " if "%lib%" neq " " goto end

)

:end
ren temp.lst %lib%.%fil%.lst >nul 2>nul
del temp.lst >nul 2>nul
del tmp.lst >nul 2>nul


2007-7-3 21:50
查看资料  发短消息  网志   编辑帖子  回复  引用回复
digitalchina
新手上路





积分 16
发帖 7
注册 2007-7-2
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

经过SPLIT后,TMP.TXT 已经变化了. 所以GETNAME 要换参数.


2007-7-3 21:51
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: