找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23302|回复: 12

[文本处理] 批处理如何将a替换为带序号的a?

[复制链接]
发表于 2022-7-31 17:00:07 | 显示全部楼层 |阅读模式
现有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
发表于 2022-7-31 17:57:56 | 显示全部楼层
本帖最后由 omIyteeee 于 2022-7-31 19:09 编辑

可能会有中文等特殊字符的,也可能是替换中文,或者替换较长一部分
发表于 2022-7-31 18:01:23 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2022-7-31 18:24:45 | 显示全部楼层
@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
发表于 2022-7-31 18:49:42 | 显示全部楼层
回复 3# ivor


    谢谢
发表于 2022-7-31 18:49:48 | 显示全部楼层
回复 4# hfxiang


    谢谢
发表于 2022-7-31 18:52:15 | 显示全部楼层
本帖最后由 omIyteeee 于 2022-7-31 19:24 编辑

回复 3# ivor


    如果有中文会乱码呀,如果替换ab就会失效,utf-8编码
发表于 2022-7-31 19:08:14 | 显示全部楼层
回复 4# hfxiang


    这个怎么用啊,直接运行没有用
发表于 2022-7-31 19:12:36 | 显示全部楼层
回复  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
复制代码
发表于 2022-7-31 19:25:28 | 显示全部楼层
回复 9# ivor


    如果替换ab会失效啊
发表于 2022-7-31 22:22:43 | 显示全部楼层
  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
复制代码
发表于 2022-8-1 08:14:39 | 显示全部楼层
回复 8# omIyteeee


以ANSi编码保存为test.bat,然后执行 test.bat A.txt
或拖放A.txt到test.bat即可
发表于 2022-8-2 10:56:41 | 显示全部楼层
回复 12# hfxiang
您好,我也有个替换中文失败的问题想请教下,替换英文可以成功,替换中文失败,将bat修改成ANSI运行仍然失败,不知道是不是编码问题,具体帖子链接如下,能帮忙看下吗,感谢!

http://www.bathome.net/thread-63381-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 19:31 , Processed in 0.022401 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表