无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3810|回复: 5
打印 上一主题 下一主题

批处理能否做到按一定格式的文本文件内容复制文件?

[复制链接]
跳转到指定楼层
1#
发表于 2012-8-27 08:11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
文本文件的格式为:
-------------------------------
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 编辑 ]
2#
发表于 2012-8-27 13:01:14 | 只看该作者
假设文本文件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 编辑 ]

点评

破天武神www.gmwxw.com/book/974.html 绝世武神www.aoswx.com/book/1076.html  发表于 2014-9-4 21:38
回复

使用道具 举报

3#
 楼主| 发表于 2012-8-27 14:28:00 | 只看该作者
感谢ing ,我试试去.
回复

使用道具 举报

4#
 楼主| 发表于 2012-8-27 16:34:06 | 只看该作者
感谢 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
复制代码
回复

使用道具 举报

5#
发表于 2012-8-27 18:20:12 | 只看该作者
回复 #4 dnnn 的帖子

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-18 09:55

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表