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

[文本处理] [分享]批处理把字符串两两交换位置

[复制链接]
发表于 2022-3-22 22:43:51 | 显示全部楼层 |阅读模式
【问题描述】
字符串abcdef如何变成badcfe,就是一二项交换位置,三四项交换位置?
 楼主| 发表于 2022-3-22 22:45:06 | 显示全部楼层
【解决方案】
  1. @echo off
  2. set OldStr=abcdef
  3. set SuffixStr=%OldStr%
  4. set NewStr=

  5. :Loop
  6. if "%SuffixStr%" equ "" (
  7.     echo,%NewStr%
  8.     pause
  9.     goto :eof
  10. ) else (
  11.     set NewStr=%NewStr%%SuffixStr:~1,1%%SuffixStr:~0,1%
  12.     set SuffixStr=%SuffixStr:~2%
  13.     goto :Loop
  14. )
复制代码
发表于 2022-3-23 09:31:26 | 显示全部楼层
跟帖一个

  1. @echo off
  2. set "oldstr=abcdefghijklmn"
  3. :loop
  4. call set tmp=%%oldstr:~%n%,2%%
  5. if "%tmp%"=="" goto quit
  6. set /p new=%tmp:~-1%%tmp:~,1%<nul
  7. set /a n+=2
  8. if not "%tmp%"=="" goto loop
  9. :quit
  10. echo;&pause
复制代码
发表于 2022-3-23 09:37:27 | 显示全部楼层
  1. "abcdefghijklmn" -split '(\w\w)'|%{
  2.   $a=$_.tochararray()    #l两两切割转数组
  3.   [array]::reverse($a)    #颠倒数组顺序
  4.   $new+=$a
  5. }
  6. $new -join ""
复制代码
发表于 2022-3-23 12:20:59 | 显示全部楼层
贴个递归版本,原理都类似
  1. function fn($str){
  2.     if($str.Length -lt 2){ return $str }
  3.     return $str.SubString(1,1) + $str.SubString(0,1) + (fn -str ($str.SubString(2)))
  4. }

  5. fn -str 'abcdefghijklmn'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 05:52 , Processed in 0.026844 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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