1

Тема: CMD/BAT: Добавить в начало каждой строки ее номер

Как добавить на начало каждой строки ее номер.

Есть база синонимов в .txt файле такого типа:
вздваивание|сдвоение
вздваивать|удваивать
вздваиваю|удваиваю

Нужно переделать и сделать так:
(1, 'вздваивание|сдвоение'),
(2, 'вздваивать|удваивать'),
(3, 'вздваиваю|удваиваю'),

Нашел в интернете батник который добавляет символы в конец каждой строки, можно и в начало строки (#^%i):

for /f "delims=" %i in (1.txt) do @(echo %i^#)>>file2.txt

А вот как добывить № не нашел...

2

Re: CMD/BAT: Добавить в начало каждой строки ее номер

Пробуйте:

+ открыть спойлер
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1

call :GetTemporaryName

if defined sSourceFile (
    if exist "%sSourceFile%" (
        set /a iCount = 0
        
        >"%TemporaryName%" (
            for /f "usebackq delims=" %%i in ("%sSourceFile%") do (
                set /a iCount += 1
                echo ^(!iCount!, '%%i'^),
            )
        )
        
        >nul copy /y "%sSourceFile%" "%~dpn1.bak"
        >nul copy /y "%TemporaryName%" "%sSourceFile%"
        del /f /q "%TemporaryName%"
    ) else (
        echo Can't find source file [%sSourceFile%].
        exit /b 2
    )
) else (
    echo Usage: %~nx0 ^<Source file^>
    exit /b 1
)


endlocal
exit /b 0

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
    setlocal enableextensions enabledelayedexpansion

:NextName
    set sTempName=%temp%\temp%random%.tmp

    if exist "%sTempName%" goto :NextName

    set sProcName=%~0

    endlocal & set %sProcName:~4%=%sTempName%
    exit /b 0
rem ==========================================================================

Можно просто перетащить исходный файл поверх командного файла в Проводнике. Пустые строки будут пропущены.

3 (изменено: papacoca, 2014-11-16 22:14:52)

Re: CMD/BAT: Добавить в начало каждой строки ее номер

alexii, спасибо большое, работает как часы...
Начал уже через Linux номера строк через консоль собирать такой командой: sed '/./=' baza.txt | sed '/./N; s/\n/, /'
Вот только консоль с кириллицей не дружит и номера строк почему то неправильные(

если нетрудно, есть формат синонимов только уже через запятую:
весьма,очень
ветвей,веток
ветви,ветки

Нужно переделать и сделать так:
(1, 'весьма|очень'),
(2, 'ветвей|веток'),
(3, 'ветви|ветки'),

4

Re: CMD/BAT: Добавить в начало каждой строки ее номер

papacoca, пробуйте:

+ открыть спойлер
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1

call :GetTemporaryName

if defined sSourceFile (
    if exist "%sSourceFile%" (
        set /a iCount = 0
        
        >"%TemporaryName%" (
            for /f "usebackq delims=" %%i in ("%sSourceFile%") do (
                set /a iCount += 1
                set sLine=%%i
                echo ^(!iCount!, '!sLine:,=^|!'^),
            )
        )
        
        >nul copy /y "%sSourceFile%" "%~dpn1.bak"
        >nul copy /y "%TemporaryName%" "%sSourceFile%"
        del /f /q "%TemporaryName%"
    ) else (
        echo Can't find source file [%sSourceFile%].
        exit /b 2
    )
) else (
    echo Usage: %~nx0 ^<Source file^>
    exit /b 1
)


endlocal
exit /b 0

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
    setlocal enableextensions enabledelayedexpansion

:NextName
    set sTempName=%temp%\temp%random%.tmp

    if exist "%sTempName%" goto :NextName

    set sProcName=%~0

    endlocal & set %sProcName:~4%=%sTempName%
    exit /b 0
rem ==========================================================================