Board logo

标题: 读取源文件内容并输出至其他文件时如何保留空行 [打印本页]

作者: wingofsea     时间: 2008-4-25 17:54    标题: 读取源文件内容并输出至其他文件时如何保留空行
需求是: 读取a.txt文件的内容, 并输出至b.txt. a.txt 的内容如下: [1111]: [2222] :[333] [44444] [5555] 666 请注意,.a.txt中包含了 : ] 等 字符, 在本论坛search了一下,没有找到一个reasonable solution,请教各位大牛,多谢

作者: pusofalse     时间: 2008-4-25 18:38    标题: ^_^
先用findstr读取出行数,包括空行,然后 echo.!str!>>b.txt for /f "delims=" %%a in ('findstr /n .* a.txt') do ( set str=%%a setlocal enabledelayedexpansion set str=!str:*:=! echo.!str!>>b.txt ) pause [ Last edited by pusofalse on 2008-4-25 at 06:44 PM ]

作者: naughtypack     时间: 2008-4-25 20:22
学习一下,呵呵,高手啊

作者: bat-zw     时间: 2008-4-25 20:22
pusofalse进步很快啊,继续加油哈, 其实没其它要求的话还是这个最方便:
@echo off
type a.txt>b.txt
pause>nul
l [ Last edited by zw19750516 on 2008-4-25 at 08:26 PM ]

作者: 106942397     时间: 2008-4-25 20:29
学习一下,学习一下

作者: bjsh     时间: 2008-4-25 23:48
Originally posted by pusofalse at 2008-4-25 06:38 PM: 先用findstr读取出行数,包括空行,然后 echo.!str!>>b.txt for /f "delims=" %%a in ('findstr /n .* a.txt') do ( set str=%%a setlocal enabledelayedexpansion ...
改成这个 for /f "delims=" %%a in ('findstr /n .* a.txt') do ( set str=%%a setlocal enabledelayedexpansion set str=!str:*:=! echo.!str!>>b.txt endlocal ) pause 不然文件一大 就导致 setlocal 递归过大。。

作者: pusofalse     时间: 2008-4-25 23:53
Originally posted by bjsh at 2008-4-25 11:48 PM: 改成这个 for /f "delims=" %%a in ('findstr /n .* a.txt') do ( set str=%%a setlocal enabledelayedexpansion set str=!str:*:=! echo.!str!>>b.txt [color=Red ...
是!多谢指正!原本要写上的,但我看着a.txt中只有那几行。。。 而没有考虑代码通用性,我一贯的不足啊~ 另外请教一下,把setlocal放在for之前和for之内有什么区别吗? 除了在for之内要用endlocal终止延迟之外~ [ Last edited by pusofalse on 2008-4-25 at 11:55 PM ]

作者: wingofsea     时间: 2008-4-28 18:48
谢啦,同问setlocal 的问题,放到循环外边跟里边的区别在哪?

作者: nipo     时间: 2008-4-29 00:32
放到循环里边是结束FOR语句的setlocal enabledelayedexpansion,放到外边就结束以上的所有SETLOCAL。 如果在此FOR语句以上还有SETLOCAL,放到外边就都结束了,你下边的环境设置就全变了。

作者: pusofalse     时间: 2008-4-29 00:36
Originally posted by nipo at 2008-4-29 12:32 AM: 放到循环里边是结束FOR语句的setlocal enabledelayedexpansion,放到外边就结束以上的所有SETLOCAL。 如果在此FOR语句以上还有SETLOCAL,放到外边就都结束了,你下边的环境设置就全变了。
貌似有点没看懂我问的意思 我是问setlocal放循环里和循环外有何区别,并不是endlocal放里和放外有何区别。。。但同样谢谢你~!

作者: nipo     时间: 2008-4-29 00:39
呵呵,答非所问是吗? 道理其实不都一样吗?放到循环外相当于设置全局变量,放到里面,只是局部变量。起作用的范围不同。

作者: bat-zw     时间: 2008-4-29 00:40
运行下面两段代码,你就能理解有什么区别了:
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1,1,33) do (
    set str=%%i
    echo !str!
)
pause>nul
@echo off
for /l %%i in (1,1,33) do (
    setlocal enabledelayedexpansion
    set str=%%i
    echo !str!
)
pause>nul

作者: pusofalse     时间: 2008-4-29 00:42
Originally posted by zw19750516 at 2008-4-29 12:40 AM: 运行下面两段代码,你就能理解有什么区别了: [code] @echo off&setlocal enabledelayedexpansion for /l %%i in (1,1,33) do ( set str=%%i echo !str! ) pause>nul ...
谢谢~ 只是这一点区别吗?~

作者: nipo     时间: 2008-4-29 00:49
咱们一起学习吧(不包括zw19750516,他是老师) www.cn-dos.net/forum/viewthrea ... www.cn-dos.net/forum/viewthrea ... [ Last edited by nipo on 2008-4-29 at 01:00 AM ]

作者: pusofalse     时间: 2008-4-29 01:00
Originally posted by nipo at 2008-4-29 12:49 AM: 咱们一起学习吧(不包括zw19750516,他是老师) www.cn-dos.net/forum/viewthrea ... [ Last edited by nipo on 2008-4-29 at 12:50 AM ]
我也这样觉得

作者: nipo     时间: 2008-4-29 01:03
^@^