2017-02-13 7 views
0

Я хотел изменить каждую строку .txt-файла в CMD, добавив «0x» каждые два символа, любую идею, какую команду мне следует использовать внутри for?Команда CMD для изменения файла по строкам, добавив «0x» каждые два символа в CMD

source.txt файл будет выглядеть примерно так:

602A0020B1010008B9010008BB010008 
BD0185AC8B9010008BB10008BB010008 
AC8B9010008BB100B9010008BB045809 
602A0020B1010008 

Выходной формат, который, как ожидается, будет получена в файле Result.txt или в том же источнике, будет следующее:

0x60, 0x2A, 0x00, 0x20, 0xB1, 0x01, 0x00, 0x08, 0xB9, 0x01, 0x00, 0x08, 0xBB, 0x01, 0x00, 0x08, 
0xBD, 0x01, 0x00, 0x08, 0xBF, 0x01, 0x00, 0x08, 0xC1, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 
... 
+2

Возможный дубликат [Пакетное добавление персонажу каждые х символов ] (http://stackoverflow.com/questions/272978 48/batch-add-a-character-every-x-characters) – JosefZ

ответ

0

Чистый раствор партии:

@echo off 
setlocal enableDelayedExpansion 
set "file=test.txt" 
>"%file%.new" (
    for /f "usebackq delims=" %%A in ("%file%") do (
    set "ln=%%A" 
    for /l %%N in (30 -2, 2) do if "!ln:~%%N!" neq "" set "ln=!ln:~0,%%N!, 0x!ln:~%%N!" 
    echo 0x!ln!, 
) 
) 
move /y "%file%.new" "%file%" >nul 


Использование JREPL.BAT

call jrepl "^..|.." "0x$&,| 0x$&," /t "|" /f test.txt /o - 

или

call jrepl ".." "$txt=($off==0?'0x':' 0x')+$0+','" /jq /f test.txt /o - 
+0

Спасибо, просто пропуская запятую в конце каждой строки, но это прекрасно! С echo 0x! Ln !, отлично работает! – Estudiante

+0

@Estudiante - Я никогда не мечтал, что вам понадобится запятая в конце, и я никогда не прокручивал ваш результат, чтобы увидеть его. Я исправил все свои ответы, чтобы добавить конечную запятую. – dbenham

0
@echo off&SetLocal EnableDelayEdexpansion 

for /f "eol= delims=" %%a in (source.txt) do (
    call :showLine %%a 
) 
pause 

:showLine 
set line=%1 
for /l %%a in (0 2 100) do (
    set n=!line:~%%a,2! 
    if defined n (
    set /p=0x!n!,<nul 
) else (
    echo; 
    goto :eof 
) 
) 
goto :eof 
0

Вот еще один чистый раствор, используя goto петли:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "_FILE=%~1" 

< "%_FILE%" > "%_FILE%.new" call :READ 
> nul move /Y "%_FILE%.new" "%_FILE%" 

endlocal 
exit /B 


:READ 
    rem // Read one line, stop if empty: 
    set "LINE=" 
    set /P LINE="" 
    if not defined LINE goto :EOF 
    set "BUF=" 
:LOOP 
    rem // Process line, build new one: 
    set "HEX=%LINE:~,2%" 
    set "BUF=%BUF%0x%HEX%, " 
    if "%LINE:~3%"=="" goto :NEXT 
    set "LINE=%LINE:~2%" 
    goto :LOOP 
:NEXT 
    rem // Return built line, read next one: 
    echo %BUF:~,-1% 
    goto :READ