Reputation: 289
I have a text file, I was wondering anyone have a batch file to add " to the beninning and ", at the end of each line in a text file?
For example I have
1
2
3
and I want
"1",
"2",
"3",
If some could paste a quick one it would help me out =)
EDIT (from comment to @mastashake57's post):
Im on windows, My appologies if it felt like i was asking someone to do it, This is what I have.
@echo off
setlocal
set addtext=test
for /f "delims=" %%a in (list.txt) do (echo/|set /p =%%a%addtext% & echo\ & echo) >>new.txt
But I cant figure out how to put commas as it thinks its part of the command I assume or something of that sort. This only places text in the font of each line.
Upvotes: 9
Views: 51183
Reputation: 9
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
You can edit the code :
"!input_file!" echo !str_at_begining!%%a!str_at_end!
By removing !str_at_end! to add str only at the beginning of the line, where %%a is the actual line.
Upvotes: 0
Reputation: 841
The script uses a FOR
loop count the # of lines, and FOR /L
along with SET /P
to read the file line-by-line:
@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
The foolproof way of counting the number of lines is explained in this answer.
Takes advantage of the SUB
character (0x1A) to trim trailing newlines, discussed here on DosTips. If you don't want to trim them, just comment out the lines that start with ;
.
Upvotes: 0
Reputation: 1935
Off the top of my head, in Linux, you can...
$ for each in `cat filename` ; do echo \"$each\", ; done >> newfilename
"1",
"2",
"3",
"4",
"5",
Edited - since it's for Windows, this did the trick for me:
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (filename.txt) do (
echo "%%a", >>newfilename.txt
)
Upvotes: 5
Reputation: 5548
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (input.txt) do (
set /a N+=1
echo ^"%%a^",>>output.txt
)
-joedf
Upvotes: 11