在txt中的特定位置用变量批量替换数据

Batch replace data with variable at specific position in a txt

我有两个目标。 首先,我需要找到一些专门位于符号@之后的16个字符的字符串,它可以在我的txt文件中的某处找到,并将其保存到一个名为v1。即使认为可以有多个“@”,重要的是我得到第一个“@”并且这个第一个“@”可以随机出现在任何地方。 其次,我需要用另一个名为 v2 的变量替换在 v1 中找到的这个特定数据块。 v1v2 都是 16 个字符长。

我的文件位于 d:\msdos\testing.txt,它有大约 3000 行甚至更多(参见下面的示例)。用户无法轻松访问其内容。所有“删除和替换”的过程都应该自动完成。另一个观察结果是 v2 周围的字符(替换后)必须保持不变。顺便说一句,搜索字符“@”不在第一行。事实上,它可以在文件中的任何位置。

adflkjsdf@12346dsf88dfsd1600vczxv0012554xzcxcz 54df 6d5s4f s5df4s fdsfsfsfsfsewfwefwfwfewfwƒÁ♣)é=E@tF¸ð♣·@t/ó=╣@uæQjèDó♣ÿÿYð·@t|,óÿÿYëà »4^ü^ü╣ë×Wüöâuêwüëøƒâðó××0è♫îô图。 ,9ê‡ß=E@t♫73¸♫ð·@t3ó=ð·@tQRjèAòÿÿZYë¿»♣4^ü‹Gü¨t~ƒàð,9ê╣wt=0ôÿÿZYÈÁèÈ1ÿ)Ѓ×ÿ!Ó73↓ÃÊÞÿÿõ) âw。÷仑╣9♪5♪eae╣♣5e♣eTab5b5▓777d2IUd04♪5♪8cd9d215d24♫b570♪22637d2ji▄7fd0458cd9fc702263a9fe6b7d73f1314♫bOIU¨&♫765d╣22637b5e6b7d73d♫80ji▄j513120da♣eTÃa§♥694♫O¶§♥I§♥♥q61g67d215 ▓♫b57022637♣d2♫15▓ab5d╣9d╣♣eTÃa♪5e6b7d73d2▄╣131cV6◙632s6I''ƒùƒßÿÁèâÿƒÈ0ˆ'ƒùƒßÿÁèƒÈ0ˆG_Ã@B6♫23q♪2§♥1q♥♥5m5p2BÃ♫a♣1eFÃ♥f♣w♣1a1B5l5B5o987W♫LKJEee879d ▓7D2╣▄╣╣╣1♥5▓24♫♥B57022637D╣9♣JI▄F♣B5D╣DD╣DD╣DD╣D215▓AB5E6B7D7D7D7D7▓▓▓VINYv▓▓3DJI 4DJI 4DJI 4 b1310222876 b↓↓↓570226ƒÀÜ‹0‹ÃƒÀsçfpro79g235flks8971IU3120dÃ

第一部分我做的很好,就这样:

@echo off
SetLocal EnableDelayedExpansion
set v2=0000000022200000
set x=d:\msdos\testing.txt
for /f "delims=@ tokens=1*" %%A in (%x%) do set v0=%%B
set v1=%v0:~0,16%
echo %v1% & REM 12346dsf88dfsd16 

我怎样才能完成第二个目标?

批处理不是执行此操作的正确工具。它可以使用 REGEX 来完成,但是批处理没有实现它。使用 dbenhams 很棒 jrepl.bat 使它变得简单:

@echo off
SetLocal 
set "v1=@[a-zA-Z0-9]{16}""  & REM this is a REGEX search pattern 
set "v2=@0000000022200000"  & REM this is the replacement string
call jrepl "%v1%" "%v2%" /F testing.txt /M /O -

有关使用信息,请参阅 jrepl.bat /?。简而言之:

jrepl <searchstring> <replacementstring> <switches>

其中 /F <inputfile> 给出要更改的文件,
/M 保留原始行结尾(此处可能不需要,但可以肯定...)
/O - 用结果覆盖输入文件。除了 -,您还可以提供文件名 (/O testing.new)

注意:这会替换文件中匹配搜索模式的 each 字符串。