在txt文件中添加每行开头和结尾的字符的批处理文件

9

我是一个文本文件,我想知道是否有批处理文件可以在文本文件的每一行开头添加",并在结尾处添加"?

例如,我有以下文本:

1
2
3

and I want

"1",
"2",
"3",

如果有人能快速粘贴一下,那会帮我很多。=)
编辑(来自评论@mastashake57的帖子):
我在使用Windows操作系统,如果让人感觉像是在要求别人代劳,那么请谅解,这就是我所拥有的内容。
@echo off 
setlocal 
set addtext=test 
for /f "delims=" %%a in (list.txt) do (echo/|set /p =%%a%addtext% & echo\ & echo) >>new.txt 

但我不知道如何在命令中添加逗号,因为它会将其视为命令的一部分。这只是将文本放置在每行字体中。


1
欢迎来到StackOverflow。这不是一个“请替我完成工作”或“请给我代码”的网站。你已经尝试过什么但没有成功吗?如果你发布你的尝试,并解释一下为什么不像你期望的那样工作,我相信这里会有人可以帮助你。不过我们确实希望你首先自己付出一些努力。 :) - Ken White
mastashake57的回答提出了一个问题,你正在使用什么操作系统?Windows和Lunix有非常不同的批处理文件。 - apple16
4个回答

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

-joedf


3
我认为启用延迟变量扩展是不必要的,而且我不明白在任何地方都没有看到N被使用。 否则,这听起来就像一个答案。 - mojo
哈哈...哎呀,是的,我不知道为什么我留下了N变量... :P 是啊...我猜我没注意到,...Bazzazle!它起作用了... :D ;) - Joe DF

5

就我所知,在Linux中,您可以...

$ for each in `cat filename` ; do echo \"$each\", ; done >> newfilename

"1",
"2",
"3",
"4",
"5",

编辑 - 由于这是针对Windows的,对我来说这个方法很有效:

@echo off
setLocal EnableDelayedExpansion

for /f "tokens=* delims= " %%a in (filename.txt) do (
echo "%%a", >>newfilename.txt
)

我在使用Windows系统,如果让你感觉像是在要求别人帮忙做,那我向你道歉。这就是我的代码:@echo off setlocal set addtext=test for /f "delims=" %%a in (list.txt) do (echo/|set /p =%%a%addtext% & echo\ & echo) >>new.txt但是我无法弄清楚如何放置逗号,因为它认为逗号是命令的一部分或者类似的东西。这段代码只会在每行前面添加文本。 - Adil Chaudhry
已编辑以反映Windows解决方案。 - Carlos

0
set "f=PATH\FILE.txt"
call :add_str_beginning_end_each_line "BEGIN_LINE--" "--END_LINE" "%f%"


REM : Adds strings at the beginning and end of each line in file
:add_str_beginning_end_each_line
    set "str_at_begining=%~1"
    set "str_at_end=%~2"
    set "input_file=%~3"

    set "tmp_file=tmp.ini"

    REM : >NUL => copy command is silent
    REM : Make a backup
    copy /Y "!input_file!" "!input_file!.bak" >NUL
    copy /Y "!input_file!" "!tmp_file!" >NUL
    del "!input_file!"

    REM : Add strings at each line
    for /f "delims=" %%a in (!tmp_file!) do (
        >>"!input_file!" echo !str_at_begining!%%a!str_at_end!
    )

    REM : delete backup
    del "!tmp_file!"
    del "!input_file!.bak"

    REM : exiting the function only
    EXIT /B 0

您可以编辑代码:

    "!input_file!" echo !str_at_begining!%%a!str_at_end!

通过删除!str_at_end!,将str仅添加到行的开头,其中%%a是实际行。

1
旧的东西又焕发新生:一些解释可能会很有趣(请勿在代码中添加注释)。 - ScriptKidd

0
脚本使用FOR循环计算行数,并使用FOR /L以及SET /P逐行读取文件:
@echo off
SETLOCAL EnableDelayedExpansion

::Initialize SUB character (0x1A)
>nul copy nul sub.tmp /a
for /F %%S in (sub.tmp) do set "sub=%%S" SUB CHARACTER

::Variables
;set "lines=-1" Exclude LAST line
set "in=<CHANGE THIS>"
set "out=text.txt"

::Count lines
FOR /F tokens^=*^ delims^=^ eol^= %%L in (
'2^>nul findstr /N "^" "%in%"'
) do set /a "lines+=1"

::Read file using SET /P
>newline.tmp <"!in!" (
  for /L %%a in (1 1 %lines%) do (
    set "x=" For EMPTY lines
    set /p "x="
    echo("!x!",
  )
    ;set "x="
    ;echo("!x!",!sub!
)

::Trim trailing newline appended by ECHO
;copy newline.tmp /a "!out!" /b
;del sub.tmp newline.tmp

计算行数的绝佳方法在这个答案中有详细解释。
利用SUB字符(0x1A)来修剪尾随的换行符,在DosTips上这里讨论。如果您不想修剪它们,只需注释掉以;开头的行即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接