将字符添加到除最后一行之外的每行的末尾

时间:2016-03-17 09:46:00

标签: windows batch-file

我试图将包含json行的文件转换为json数组。为了实现这一点,我不得不在文件中附加开始和结束方括号(已完成!)。为了完成我只需要在除最后一行之外的每一行的末尾添加一个逗号。我使用以下脚本,但我不知道如何在最后一行停止。

@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (input.txt) do (
set /a N+=1
echo ^%%a^, >> output.txt
)

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

尝试此操作,如果您的行不符合!符号,则应该可以使用。 它会生成一个temp.file。如果您需要删除最后一行文件。您需要使用所需的值更改fileLocendSymbol的值。

@echo off
setlocal enableDelayedExpansion

::-------------------------::
:: Change the values here  ::
set "fileLoc=testFile.txt"
set "endSymbol=,"
::-------------------------::



set counter=0
for /f "usebackq tokens=* delims=" %%# in ("%fileLoc%") do (
    set /a counter=counter+1
    set "line[!counter!]=%%#"
)

set /a upToLine=counter-1
break>temp.file
for /l %%# in (1;1;!upToLine!) do (
    (echo(!line[%%#]!%endSymbol%)>>temp.file
)
(echo(!line[%counter%]!)>>temp.file

:: Uncoment line bellow if temp.file is ok
rem move /y temp.file "%fileLoc%"

答案 1 :(得分:1)

可以使用纯批处理编辑文本文件,但这需要不合理的代码量,特别是如果您希望结果是健壮的。对于大文件来说,它往往很慢。

与我想要批量操作文件内容的大多数问题一样,我会使用JREPL.BAT - a regular expression find and replace utility

JREPL.BAT是纯脚本(混合JScript /批处理),可以在XP以后的任何Windows机器上本机运行。如果您想要分页输出,可以从命令行通过jrepl /?jrepl /??获取完整文档。

JREPL非常强大且速度相当快。但是,您需要了解正则表达式,如果您研究了许多JREPL选项,那么您可以有效地完成一些非常复杂的事情。

以下内容会在除最后一行之外的每一行附加一个X.

jrepl "\r?\n(?=[\s\S])" "X$&" /m /f test.txt /o -

如果将命令放在批处理脚本中,请使用call jrepl

以上内容适用于任何文本文件,只要总长度小于1千兆字节。此限制源于您必须使用/M选项搜索多行。因此必须将整个文件加载到内存中,JScript会限制内存大小。

答案 2 :(得分:1)

@echo off
setlocal EnableDelayedExpansion

set "line="
(  for /F "delims=" %%a in (input.txt) do (
      if defined line echo !line!,
      set "line=%%a"
   )
   echo !line!
) > output.txt