欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

windows bat系列11:for处理案例四 去掉字符串中的空格

程序员文章站 2024-01-15 19:47:52
...

背景

不管学习何种编程语言,何种编程脚本,对字符串的处理都是必备的基础知识之一。本文讲述BAT批处理脚本中如何去掉字符串中的空格。

源码

@echo off

set str_left="   with left space"
set str_right="with right space   "
set str_space="   many    space   "

echo -------------Before strim---------------
echo=

echo %str_left% 
echo %str_right%
echo %str_space%

echo=
echo -------------After strim---------------

CALL :StripLeft %str_left%
echo "%G_STRIP_LEFT_RETURN%"

CALL :StripRight %str_right%
echo "%G_STRIP_RIGHT_RETURN%"

CALL :StripLR %str_space%
echo "%G_STRIP_LR_RETURN%"

set strimALL=%str_space: =%
echo %strimALL%

pause


Rem ------------for call function---------
:StripLeft
for /f "tokens=*" %%i in (%1) do SET G_STRIP_LEFT_RETURN=%%i
GOTO:EOF

:StripRight
Rem n、x表示命令的选项,分别表示文件名、文件扩展
Rem delims表示指定分隔符为空格
for /f "delims=" %%i in (%1) do SET G_STRIP_RIGHT_RETURN=%%~nxi
GOTO:EOF

:StripLR
Rem n、x表示命令的选项,分别表示文件名、文件扩展
for /f "tokens=*" %%i in (%1) do SET G_STRIP_LR_RETURN=%%~nxi
GOTO:EOF

源码说明

  1. 源码设置了四种场景:去掉左边空格、去掉右边空格、去掉左右两边空格、去掉所有空格;设置了三个变量str_leftstr_rightstr_space)用于测试;
  2. 针对前三种场景,使用了call的命令扩展用法,即call 后面带标签去执行标签代码DOS帮助文档的解释如下:
    If Command Extensions are enabled CALL changes as follows: CALL command now accepts labels as the target of the CALL.  The syntax is: 
    CALL :label arguments
    
  1. 为了便于观察去掉空格操作导致字符串的变化,我在定义变量时在字符串两侧增加了双引号包含字符串内容,这样处理前echo变量不需要带引号,而在后面的for语句中%1(表示第一个参数)没有带引号,导致处理后再echo变量需要带引号……有点混乱,请读者自测
  2. 标签StripRight的处理使用了for语句中delims,指示用默认的分隔符(空格、tab)分割字符串,后面的%%~nxi使用了命令扩展用法,原生态解释如下(call /?):
%~n1        - expands %1 to a file name only
%~x1        - expands %1 to a file extension only
  1. Pause语句放到所有标签命令块的前面,不然会被当作标签命令块的一部分

测试结果

windows bat系列11:for处理案例四 去掉字符串中的空格

参考

DOS删除空格​​​​​​​