Board logo

标题: [文本处理] 批处理如何将a替换为带序号的a? [打印本页]

作者: omlyteeee    时间: 2022-7-31 17:00     标题: 批处理如何将a替换为带序号的a?

现有a.txt
内容如下:
abcdff
fasdffa
aaa
a"
:a"a"
a
a:
处理为b.txt
a1bcdff
fa2sdffa3
a4a5a6
a7"
:a8"a9"
a10
a11
或者为随机序号
a121bcdff
fa2321sdffa312
a3231a433a5212
a631232"
:a7123"a8221"
a932
a102
作者: omIyteeee    时间: 2022-7-31 17:57

本帖最后由 omIyteeee 于 2022-7-31 19:09 编辑

可能会有中文等特殊字符的,也可能是替换中文,或者替换较长一部分
作者: ivor    时间: 2022-7-31 18:01

本帖最后由 ivor 于 2022-7-31 18:10 编辑
  1. #&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit
  2. $num=0;$tmp=''
  3. get-content a.txt | %{
  4.    
  5.     [char[]]$_ | %{
  6.         if($_ -eq 'a'){
  7.             $num++
  8.             $tmp += $_+$num
  9.         }else{
  10.         $tmp += $_
  11.         }
  12.     }
  13.     $tmp+= "`r`n"
  14.    
  15. }
  16. Out-File -FilePath b.txt -InputObject $tmp
复制代码

作者: hfxiang    时间: 2022-7-31 18:24

@echo off
@rem 借用plp626大神的_strlen函数( http://www.bathome.net/thread-11799-1-7.html
set "Str="
setlocal enabledelayedexpansion
set "_strlen=set $=^!#1^!#&set ##=&(for %%a in (4096 2048 1024 512 256 128 64 32 16)do if ^!$:~%%a^!. NEQ . set/a##+=%%a&set $=^!$:~%%a^!)&set $=^!$^!fedcba9876543210&set/a##+=0x^!$:~16,1^!"
for /f "usebackq tokens=*"  %%a in ("%~1") do (
        set "#1=%%a"
        (%_strlen%)
        for /L %%b in (0,1,!##!) do (
                set "c=!#1:~%%b,1%!"
                if !c! neq a (
                        set "Str=!Str!!c!"
                ) else (
                        set/a No+=1
                        set "Str=!Str!!c!!No!"
                )
        )
        echo;!Str!
        set "Str="
)
endlocal &pause &exit/b
作者: omIyteeee    时间: 2022-7-31 18:49

回复 3# ivor


    谢谢
作者: omIyteeee    时间: 2022-7-31 18:49

回复 4# hfxiang


    谢谢
作者: omIyteeee    时间: 2022-7-31 18:52

本帖最后由 omIyteeee 于 2022-7-31 19:24 编辑

回复 3# ivor


    如果有中文会乱码呀,如果替换ab就会失效,utf-8编码
作者: omIyteeee    时间: 2022-7-31 19:08

回复 4# hfxiang


    这个怎么用啊,直接运行没有用
作者: ivor    时间: 2022-7-31 19:12

回复  ivor


    如果有中文会乱码呀,如果替换ab就会失效
omIyteeee 发表于 2022-7-31 18:52
  1. #&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit
  2. $num=0;$tmp=''
  3. get-content a.txt  -Encoding UTF8 | %{
  4.    
  5.     [char[]]$_ | %{
  6.         if($_ -eq 'a'){
  7.             $num++
  8.             $tmp += $_+$num
  9.         }else{
  10.         $tmp += $_
  11.         }
  12.     }
  13.     $tmp+= "`r`n"
  14.    
  15. }
  16. Out-File -FilePath b.txt -InputObject $tmp
复制代码

作者: omIyteeee    时间: 2022-7-31 19:25

回复 9# ivor


    如果替换ab会失效啊
作者: flashercs    时间: 2022-7-31 22:22

  1. @echo off
  2. cd /d "%~dp0"
  3. powershell -c "$enc=new-object system.text.utf8encoding $false;$re=[regex]'(?i)a';$script:ctr=0;[system.io.file]::writealltext('a.txt',$re.Replace([system.io.file]::ReadAllText('a.txt',$enc),{param($m)$m.Value+(++$Script:ctr)}),$enc)"
  4. pause
复制代码

作者: hfxiang    时间: 2022-8-1 08:14

回复 8# omIyteeee


以ANSi编码保存为test.bat,然后执行 test.bat A.txt
或拖放A.txt到test.bat即可
作者: shuai    时间: 2022-8-2 10:56

回复 12# hfxiang
您好,我也有个替换中文失败的问题想请教下,替换英文可以成功,替换中文失败,将bat修改成ANSI运行仍然失败,不知道是不是编码问题,具体帖子链接如下,能帮忙看下吗,感谢!

http://www.bathome.net/thread-63381-1-1.html




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2