Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file CMD命令逐行修改文件,添加;0x";CMD中的每两个字符_Batch File_Cmd - Fatal编程技术网

Batch file CMD命令逐行修改文件,添加;0x";CMD中的每两个字符

Batch file CMD命令逐行修改文件,添加;0x";CMD中的每两个字符,batch-file,cmd,Batch File,Cmd,我想通过每两个字符添加“0x”来修改CMD中.txt文件的每一行,知道我应该在for中使用什么命令吗 source.txt文件如下所示: 602A0020B1010008B9010008BB010008 BD0185AC8B9010008BB10008BB010008 AC8B9010008BB100B9010008BB045809 602A0020B1010008 预期在文件result.txt或同一源中获得的输出格式如下: 0x60, 0x2A, 0x00, 0x20, 0xB1, 0x

我想通过每两个字符添加“0x”来修改CMD中.txt文件的每一行,知道我应该在
for
中使用什么命令吗

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,
...
@echo off&SetLocal EnableDelayEdexpansion
对于/f“eol=delims=”%(source.txt)中的%%a do(
电话:showLine%%a
)
暂停
:showLine
设置行=%1
对于(0 2 100)do中的/l%%a(
集合n=!行:~%%a,2!
如果定义n(
设置/p=0x!n!,纯批量解决方案:

@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

使用

下面是另一个纯解决方案,使用
goto
循环:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u文件=%~1”
<“%\u文件%”>“%\u文件%.new”调用:读取
>nul move/Y“%\u文件%。新建“%\u文件%”
端部
退出/B
:读
rem//读取一行,如果为空则停止:
设置“行=”
设置/P行=“”
如果未定义行goto:EOF
设置“BUF=”
:循环
rem//工艺线,新建一条:
设置“十六进制=%LINE:~,2%”
设置“BUF=%BUF%0x%HEX%”
如果“%LINE:~3%”==“转到:下一步”
设置“行=%LINE:~2%”
转到:循环
:下一个
rem//返回生成行,阅读下一行:
回显%BUF:~,-1%
后藤:读

Thank you的可能重复,只是缺少每行末尾的逗号,但这很完美!使用echo 0x!ln!,效果很好!@Estudiante-我做梦也没想到你会在结尾处使用逗号,我也从来没有滚动过你的结果来查看它。我修复了所有答案,添加了后面的逗号。
@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
call jrepl "^..|.." "0x$&,| 0x$&," /t "|" /f test.txt /o -
call jrepl ".." "$txt=($off==0?'0x':' 0x')+$0+','" /jq /f test.txt /o -