标题: [文本处理] 批处理如何将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 编辑
- #&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit
- $num=0;$tmp=''
- get-content a.txt | %{
-
- [char[]]$_ | %{
- if($_ -eq 'a'){
- $num++
- $tmp += $_+$num
- }else{
- $tmp += $_
- }
- }
- $tmp+= "`r`n"
-
- }
- 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
- #&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit
- $num=0;$tmp=''
- get-content a.txt -Encoding UTF8 | %{
-
- [char[]]$_ | %{
- if($_ -eq 'a'){
- $num++
- $tmp += $_+$num
- }else{
- $tmp += $_
- }
- }
- $tmp+= "`r`n"
-
- }
- Out-File -FilePath b.txt -InputObject $tmp
复制代码
作者: omIyteeee 时间: 2022-7-31 19:25
回复 9# ivor
如果替换ab会失效啊
作者: flashercs 时间: 2022-7-31 22:22
- @echo off
- cd /d "%~dp0"
- 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)"
- 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 |