无忧启动论坛
标题:
批处理能否做到按一定格式的文本文件内容复制文件?
[打印本页]
作者:
dnnn
时间:
2012-8-27 08:11
标题:
批处理能否做到按一定格式的文本文件内容复制文件?
文本文件的格式为:
-------------------------------
c:\111\111.txt
c:\222\111.txt
c:\666\555.txt
c:\888\444.txt
c:\999\222.dll
c:\4554\666.exe
c:\777\kkk.dll
----------------------------------
文本文件里面的格式为文件的绝对地址,以空行分割为组,至少两行每组,最多可能有5行每组,每组的行数不固定.
---------------------------------------------------------------------------------------------------------------------------------------------------
要求把每组的第一行的文件复制到每组的其他行的位置
比如把上面的例子的c:\111\111.txt复制为c:\222\111.txt,如果c:\222\111.txt存在也覆盖.
再比如:把c:\666\555.txt复制为c:\888\444.txt和c:\999\222.dll
-------------------------------------------------------------------------------------------------------------------------------------------------
同系列的还有个要求,就是按这个文本格式,保留每组的第一行,删除每组的其余行.
比如要保留c:\111\111.txt 删除c:\222\111.txt
再比如:保留c:\666\555.txt 把c:\888\444.txt和c:\999\222.dll 都删除.
---------------------------------------------------------------------------------------------------------------------------------------------------
求比处理高手看下能否实现,在此先
[
本帖最后由 dnnn 于 2012-8-27 08:13 编辑
]
作者:
pznpt
时间:
2012-8-27 13:01
假设文本文件1.txt
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
if "%%b"=="" (set a=&set b=) else set a=True
if defined a (
if defined b (echo f|xcopy "!b!" "%%b" /h /y) else set "b=%%b"
)
)
pause
复制代码
第2问,生成新文件2.txt
@echo off
(for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
if "%%b"=="" (set a=&set b=) else set a=True
if defined a if not defined b set b=True&echo,%%b
))>2.txt
pause
复制代码
----------------------------
稍做修改,WinXP与Win7下测试通过
[
本帖最后由 pznpt 于 2012-8-27 16:33 编辑
]
作者:
dnnn
时间:
2012-8-27 14:28
感谢ing ,我试试去.
作者:
dnnn
时间:
2012-8-27 16:34
感谢 pznpt 大侠的鼎立相助,在此印证了批处理的强大
经测试 第一个批处理修改为下面的代码达到了我的要求.
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
if "%%b"=="" (set a=&set b=) else set a=1
if defined a (
if defined b (xcopy "!first!" "%%b" /h /y) else set b=1&set "first=%%b"
)
)
pause
复制代码
第二个批处理生成的列表文件2.txt为每组数据的第一行,而我所需要的是每组数据除了第一行的其余行.
我把第一个的批处理改了一下实现了我的第二个要求,代码如下不知道对不对.
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
if "%%b"=="" (set a=&set b=) else set a=1
if defined a (
if defined b (del /f /q "%%b") else set b=1
)
)
pause
复制代码
作者:
pznpt
时间:
2012-8-27 18:20
回复 #4 dnnn 的帖子
抱歉,第2个问题理解错了。楼主改的没问题,不要setlocal enabledelayedexpansion也可以的
欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/)
Powered by Discuz! X3.3