批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[文本处理] 批处理如何将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 19:09 编辑

可能会有中文等特殊字符的,也可能是替换中文,或者替换较长一部分

TOP

本帖最后由 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
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

@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

TOP

回复 3# ivor


    谢谢

TOP

回复 4# hfxiang


    谢谢

TOP

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

回复 3# ivor


    如果有中文会乱码呀,如果替换ab就会失效,utf-8编码

TOP

回复 4# hfxiang


    这个怎么用啊,直接运行没有用

TOP

回复  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
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 9# ivor


    如果替换ab会失效啊

TOP

  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
复制代码
微信:flashercs
QQ:49908356

TOP

回复 8# omIyteeee


以ANSi编码保存为test.bat,然后执行 test.bat A.txt
或拖放A.txt到test.bat即可

TOP

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

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

TOP

返回列表