无忧启动论坛

标题: 批处理能否做到按一定格式的文本文件内容复制文件? [打印本页]

作者: 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
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
  3.   if "%%b"=="" (set a=&set b=) else set a=True
  4.   if defined a (
  5.     if defined b (echo f|xcopy "!b!" "%%b" /h /y) else set "b=%%b"
  6.   )
  7. )
  8. pause
复制代码

第2问,生成新文件2.txt
  1. @echo off
  2. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
  3.   if "%%b"=="" (set a=&set b=) else set a=True
  4.   if defined a if not defined b set b=True&echo,%%b
  5. ))>2.txt
  6. pause
复制代码


----------------------------
稍做修改,WinXP与Win7下测试通过

[ 本帖最后由 pznpt 于 2012-8-27 16:33 编辑 ]
作者: dnnn    时间: 2012-8-27 14:28
感谢ing ,我试试去.
作者: dnnn    时间: 2012-8-27 16:34
感谢 pznpt 大侠的鼎立相助,在此印证了批处理的强大

经测试 第一个批处理修改为下面的代码达到了我的要求.

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
  3.   if "%%b"=="" (set a=&set b=) else set a=1
  4.   if defined a (
  5.     if defined b (xcopy "!first!" "%%b" /h /y) else set b=1&set "first=%%b"
  6.   )
  7. )
  8. pause
复制代码


第二个批处理生成的列表文件2.txt为每组数据的第一行,而我所需要的是每组数据除了第一行的其余行.

我把第一个的批处理改了一下实现了我的第二个要求,代码如下不知道对不对.

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
  3.   if "%%b"=="" (set a=&set b=) else set a=1
  4.   if defined a (
  5.     if defined b (del /f /q "%%b") else set b=1
  6.   )
  7. )
  8. pause
复制代码

作者: pznpt    时间: 2012-8-27 18:20
回复 #4 dnnn 的帖子

抱歉,第2个问题理解错了。楼主改的没问题,不要setlocal enabledelayedexpansion也可以的




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3