The Windows command processor is designed for running commands and applications. It is not designed for editing text files. Really every scripting or programming language would be better for this task than a batch file executed by Windows command processor
For your simple text file example with using a character encoding with one byte per character or UTF-8 a simple batch file can be used:
@echo off setlocal EnableExtensions EnableDelayedExpansion set "LineNumber=0" del "%TEMP%\TextFile.tmp" 2>nul for /F "usebackq delims=" %%I in ("TextFile.txt") do ( set /A LineNumber+=1 echo line!LineNumber! = %%I ) >>"%TEMP%\TextFile.tmp" if exist "%TEMP%\TextFile.tmp" move /Y "%TEMP%\TextFile.tmp" "TextFile.txt" if errorlevel 1 del "%TEMP%\TextFile.tmp" endlocal
But this batch file fails to process a line correct which
- does not contain any character (empty line),
- starts with a semicolon
- contains one or more exclamation marks
A better but slower batch file would be:
@echo off setlocal EnableExtensions DisableDelayedExpansion set "LineNumber=0" del "%TEMP%\TextFile.tmp" 2>nul for /F delims^=^ eol^= %%A in ('%SystemRoot%\System32\findstr.exe /N "^" "TextFile.txt" 2^>nul') do ( set "Line=%%A" set /A LineNumber+=1 setlocal EnableDelayedExpansion echo line!LineNumber! = !Line:*:=! endlocal ) >>"%TEMP%\TextFile.tmp" if exist "%TEMP%\TextFile.tmp" move /Y "%TEMP%\TextFile.tmp" "TextFile.txt" if errorlevel 1 del "%TEMP%\TextFile.tmp" endlocal
See my answer on How to read and print contents of text file line by line? why the FOR loop is much more complex to process text files better.
A text file with UTF-16 or UTF-32 character encoding cannot be processed with those two batch files.
For understanding the used commands and how they work, open a command prompt window, execute there the following commands, and read entirely all help pages displayed for each command very carefully.
See also the Microsoft article about Using command redirection operators.