Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In windows is it possible to write a batch that emulates findstr /n /r . file.txt?

Tags:

batch-file

Okay, I know this is purely academic because the findstr command can do what I expect in a jiffy.

I have a text file whose strings (lines) I want numbered. I was wondering whether it's possible to write a batch that emulates it and gives me the flexibility of moving the tagging integer anywhere in the string.

For example the standard output is 1: some string

Let us say I want

  • 1)some string (without using find and replace in Windows Explorer), or
  • somestring........(1), or
  • s 1] somestring
like image 940
C_urious' ' Avatar asked Dec 05 '25 07:12

C_urious' '


1 Answers

EDIT: I modified the code in order to insert the line number at any place in the line:

@echo off
setlocal DisableDelayedExpansion

rem Define the format of output lines; for example

rem To show "(lineNo) line" use:
set "format=(!lineNo!) !line!"

rem To show "20 chars of line (lineNo) rest of line" use:
set "format=!line:~0,20! (!lineNo!) !line:~20!"
rem and adjust each line read appending 20 spaces

rem To show "line (lineNo placed at column 75)" use:
set "format=!line:~0,73! (!lineNo!)"
rem and adjust each line read appending 73 spaces

rem To show line numbers with left zeros, start lineNo with the proper
rem number of zeros and modify the format accordingly; for example:
set lineNo=100
set "format=!line:~0,73! (!lineNo:~1!)"


setlocal EnableDelayedExpansion
copy %1 "%~1.tmp" > NUL
set "EOF=%random%%random%%random%"
echo :%EOF%EOF:>> "%~1.tmp"
REM set lineNo=0
call :ReadLines < "%~1.tmp"
del "%~1.tmp"
goto :EOF

:ReadLines
   set "line="
   set /P "line="
   if "!line!" equ ":%EOF%EOF:" goto :EOF
   set "line=!line!                                                                         "
   set /A lineNo+=1
   echo %format%
goto ReadLines

Output example:

@echo off                                                                 (01)
setlocal DisableDelayedExpansion                                          (02)
                                                                          (03)
rem Define the format of output lines; for example                        (04)
                                                                          (05)
rem To show "(lineNo) line" use:                                          (06)
set "format=(!lineNo!) !line!"                                            (07)
                                                                          (08)
rem To show "20 chars of line (lineNo) rest of line" use:                 (09)
set "format=!line:~0,20! (!lineNo!) !line:~20!"                           (10)
rem and adjust each line read appending 20 spaces                         (11)
                                                                          (12)
rem To show "line (lineNo placed at column 75)" use:                      (13)
set "format=!line:~0,73! (!lineNo!)"                                      (14)
rem and adjust each line read appending 73 spaces                         (15)
                                                                          (16)
rem To show line numbers with left zeros, start lineNo with the proper    (17)
rem number of zeros and modify the format accordingly; for example:       (18)
set lineNo=100                                                            (19)
set "format=!line:~0,73! (!lineNo:~1!)"                                   (20)
                                                                          (21)
                                                                          (22)
setlocal EnableDelayedExpansion                                           (23)
copy %1 "%~1.tmp" > NUL                                                   (24)
set "EOF=%random%%random%%random%"                                        (25)
echo :%EOF%EOF:>> "%~1.tmp"                                               (26)
REM set lineNo=0                                                          (27)
call :ReadLines < "%~1.tmp"                                               (28)
del "%~1.tmp"                                                             (29)
goto :EOF                                                                 (30)
                                                                          (31)
:ReadLines                                                                (32)
   set "line="                                                            (33)
   set /P "line="                                                         (34)
   if "!line!" equ ":%EOF%EOF:" goto :EOF                                 (35)
   set "line=!line!                                                       (36)
   set /A lineNo+=1                                                       (37)
   echo %format%                                                          (38)
goto ReadLines                                                            (39)
like image 132
Aacini Avatar answered Dec 10 '25 01:12

Aacini



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!