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
源码说明
- 源码设置了四种场景:去掉左边空格、去掉右边空格、去掉左右两边空格、去掉所有空格;设置了三个变量(str_left、str_right、str_space)用于测试;
-
针对前三种场景,使用了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
- 为了便于观察去掉空格操作导致字符串的变化,我在定义变量时在字符串两侧增加了双引号包含字符串内容,这样处理前echo变量不需要带引号,而在后面的for语句中%1(表示第一个参数)没有带引号,导致处理后再echo变量需要带引号……有点混乱,请读者自测;
- 标签StripRight的处理使用了for语句中delims,指示用默认的分隔符(空格、tab)分割字符串,后面的%%~nxi使用了命令扩展用法,原生态解释如下(call /?):
%~n1 - expands %1 to a file name only
%~x1 - expands %1 to a file extension only
- Pause语句放到所有标签命令块的前面,不然会被当作标签命令块的一部分
测试结果
参考
DOS删除空格
上一篇: 【K8s】第一次部署项目