标题: [特效代码] 批处理怎样在字符串中插入字符呢? [打印本页]
作者: xzwcn 时间: 2013-3-30 21:38 标题: 批处理怎样在字符串中插入字符呢?
如字符串:340524
转换为:3,4,0,5,2,4
要怎样写代码呢?
作者: BAT-VBS 时间: 2013-3-30 22:20
- echo 340524|gawk -F "" "{for(i=1;i<NF;i++)printf $i\",\";print $i}"
复制代码
作者: xzwcn 时间: 2013-3-30 23:52
'gawk' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
?
作者: CrLf 时间: 2013-3-31 00:47
楼主给的特例可以这样:- @echo off&setlocal enabledelayedexpansion
- set test=340524
- for /f %%a in ('cmd /v /u /c "echo ^!test^!"^|more') do set "str=!str!,%%a"
- echo !str:~1!
- pause
复制代码
作者: CrLf 时间: 2013-3-31 00:53
仍然是根据楼主的特例写的:- @echo off&setlocal enabledelayedexpansion
- set test=340524
- for /l %%a in (0 1 9) do set "str=!str:%%a=,%%a!"
- echo !str:~1!
- pause
复制代码
作者: CrLf 时间: 2013-3-31 01:00
常见的通用方案是:- @echo off&setlocal enabledelayedexpansion
- set test=340524
- for /l %%a in (0 1 4090) do (
- if "!test:~%%a!"=="" goto exitFor
- set "test=!test:~,%%a!,!test:~%%a!"
- )
- :exitFor
- echo !test!
- pause
复制代码
作者: CrLf 时间: 2013-3-31 01:10
以上一个方案为基础的另一个方案,最长支持100字符长度,速度较快:- @echo off&setlocal enabledelayedexpansion
- set test=340524
- for /l %%a in (9 -1 0) do (
- set 个位=!个位!9876543210
- set 十位=!十位!%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a
- )
- set 个位=!test!!个位!
- set 十位=!test!!十位!
- set /a 长度=1!十位:~99,1!!个位:~99,1!-100
- for /l %%a in (1 1 !长度!) do set "test=,!test:~-1!!test:~,-1!"
- echo !test:~1!
- pause
复制代码
作者: CrLf 时间: 2013-3-31 01:14
和上一个方案思路一致,只是通过调用二分回溯函数来计算长度,对付长字符串时具有优势- @echo off&setlocal enabledelayedexpansion
- set test=340524
- call :strlen test 长度
- for /l %%a in (1 1 !长度!) do set "test=,!test:~-1!!test:~,-1!"
- echo !test:~1!
- pause
-
- :strlen
- setlocal enabledelayedexpansion
- set "$=!%1!#"
- set len=&for %%a in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1)do if !$:~%%a^,1!. NEQ .
-
- set/a len+=%%a&set $=!$:~%%a!
- endlocal&If %2. neq . (set/a%2=%len%)else echo %len%
- exit/b
复制代码
作者: CrLf 时间: 2013-3-31 01:29
或用简便而强大的 js 正则替换:- @set @n=0;/*&echo off&setlocal enabledelayedexpansion
- set test=340524
- echo !test!|cscript /nologo /e:jscript %0
- pause&exit/b*/
- WScript.Echo(WScript.StdIn.ReadAll().replace(/(\w)/g,",$1").replace(/^,/,""))
复制代码
作者: CrLf 时间: 2013-3-31 01:31
第三方当然也是可以的- @echo off&setlocal enabledelayedexpansion
- set test=340524
- echo !test!|sed "s/./,&/g;s/^,//"
- pause
复制代码
作者: xzwcn 时间: 2013-3-31 09:48
回复 10# CrLf
非常感谢!辛苦了!我增加个可以自定义字符串及要插入的字符。。如果可以自定义间隔,那要怎么做呢?还是上面的例子,如:间隔为2,结果:34,05,24- @echo off&setlocal enabledelayedexpansion
- :input
- cls
- set str=
- set /p test=请输入字符串:
- set /p char=请输入要插入的字符:
- for /f %%a in ('cmd /v /u /c "echo ^!test^!"^|more') do set "str=!str!%char%%%a"
- echo !str:~1!
-
-
- set "comd="
- set /p "comd=按 X 键再回车退出, 否则按回车后继续运行: "
- if /i "%comd%"=="x" (exit) else goto :input
- exit
复制代码
作者: a5321 时间: 2020-12-22 17:48
非常感谢 思路很好
作者: a5321 时间: 2020-12-23 11:34
不错啊 谢谢分享
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |