首页 > 解决方案 > 用txt中特定位置的变量批量替换数据

问题描述

我有两个目标。 首先,我需要找到一些 16 字符的字符串,专门位于符号 之后@,可以在我的 txt 文件中的某处找到,并将其保存到一个名为v1. 即使可以有几个“@”,重要的是我得到第一个“@”,而第一个“@”可以随机出现在任何地方。其次,我需要v1用另一个名为v2. v1和都是v216 个字符长。

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

adflkjsdf@ 12346dsf88dfsd16 00vczxv0012554xzcxcz 54df 6d5s4f s5df4s fdsfsfsfsfsewfwefwfwfewfwƒÁ♣)é=E@tF¸ð♣·@t/ó=╣@uæQjèDó♣ÿÿYð·@t|,óÿÿYëû4^ü^ü╣Ë‹WüöÂuÊWüëøƒâðÓ×ú0è♫îôÿÿ_øCD. üû0.♣Úè♫õÿÿÆ·@ð] ^Ã×ÐèÛøÿÿÀtÅÂðùèŽôÿÿð╣èGü╣ÿÿè]^ËGü¨íƒàð,9ê‡ß=E@t♫73¸♫ð·@t3ó=ð·@tQRjèAòÿÿZYë¿»♣4^ü‹Gü¨t~ƒàð,9ê╣wt=0ôÿÿZYÈÁèÈ1ÿ)Ѓ×ÿ! Ó73▓Ãa▓ÃaÿÿÿƒÀ0U)Âw.÷ƒÅëT.üz|ú0ðèÿÿcd9f·@ð]_^ÃÆ·@d2cji▄♫♫f♣♫♫5b577i▄868dda11f81f72655a55ffa3fa7ce3a2c00cf♣w♣1T5d045opi4336578╣5d╣9d2▓╣╣▄f♣▄13120d694ss2014 ╣5ja♣♥1eFÃ♣╣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╣9D╣9D╣CPO ♣W♣1A1B5L5B5O987Wlkjeee879d2▓7D2╣▄╣╣╣1♥5▓24♫♥B57022637D 9♣ 86d215d21OIE98222╣tr2♪4♫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 

我怎样才能实现第二个目标?

标签: batch-filebatch-processing

解决方案


批处理不是解决此问题的正确工具。可以使用 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>

where/F <inputfile>给出要更改的文件,
/M保留原始行结尾(这里可能不需要,但可以肯定......)
/O -用结果覆盖 inputfile。代替-你也可以给一个文件名 ( /O testing.new)

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


推荐阅读