BuddyPress bbPress

Windows的BAT脚本字符串匹配与替换

标签:, , ,
  • 712  1#6658
    飞仔
    参与者
    楼主

    原字符串

    set "_ORIGINAL_STR=ip=xx, mask=xx, gateway=xx, dns=xx xx"
    
    echo %_ORIGINAL_STR%
    
    ip=xx, mask=xx, gateway=xx, dns=xx xx
    

    现在,既要去除原字符串的所有空格,又要保留 dns=xx xx 的空格

    这很轻松的实现了

    set "_ORIGINAL_STR=%_ORIGINAL_STR:, =,%"
    
    echo %_ORIGINAL_STR%
    
    ip=xx,mask=xx,gateway=xx,dns=xx xx
    

     

    如果,原字符串的逗号 , 后面的空格无法确定数量(即空格数量是未知的变量)

    原字符串

    set "_ORIGINAL_STR=ip=xx, mask=xx,   gateway=xx,             dns=xx xx"
    
    echo %_ORIGINAL_STR%
    
    ip=xx, mask=xx,   gateway=xx,             dns=xx xx
    

    那么此时,我们又应该如何处理?

    既要去除原字符串的所有空格,又要保留 dns=xx xx 的空格

    • 该话题由飞仔 于 1年、 4月前 修正。
    • 该话题由飞仔 于 1年、 4月前 修正。
回复 1
    • 2#6661
      飞仔
      参与者
      楼主

      我们当前的处理方法是

      
      call :__FOR_N_STR_MATCH_X_REPLACE_Y 20 "%_ORIGINAL_STR%" ", " ","
      
      goto :EOF
      
      :__FOR_N_STR_MATCH_X_REPLACE_Y
      	@REM %1 = 遍历次数上限
      	@REM %2 = 原字符串
      	@REM %3 = 用于匹配的字符串
      	@REM %4 = 用于替换的字符串
      	set "_ORIGINAL_STR=%~2"
      	set "_MATCH_STR=%~3"
      	set "_REPLACE_STR=%~4"
      	if not defined _MATCH_STR ( echo 错误!参数太少或匹配字符串不能为空! & exit /b 2 )
      	for /l %%a in (1,1,%1) do (
      		if "!_ORIGINAL_STR!" == "!_ORIGINAL_STR:%_MATCH_STR%=%_REPLACE_STR%!" ( exit /b 0 )
      		set "_ORIGINAL_STR=!_ORIGINAL_STR:%_MATCH_STR%=%_REPLACE_STR%!"
      	)
      	exit /b 1
      • 该回复由飞仔 于 1年、 4月前 修正。
      • 该回复由飞仔 于 1年、 4月前 修正。
      • 该回复由飞仔 于 1年、 4月前 修正。
回复 1
  • 哎呀,回复话题必需登录。