中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-15 13:22
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何删除变量最后面的空格? 查看 813 回复 6
楼 主 如何删除变量最后面的空格? 发表于 2007-06-02 08:02 ·  中国 湖南 娄底 冷水江市 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线

@echo off
set a="w e t "
要求 设变量 b=w e t
变量a不一定是三位数,请问有没有什么通用性的方法删除最后的空格?

::谢各位,其实我的本意是这样,从a.txt读取内容 设为变量a,然后去掉最后的所有空格.

::a.txt的内容如下 注:引号是我人为加的

" w e t hhh ggggg "

3742668
荣誉版主
的方法解决了我的问题,原来 if " " 双引号中间有个空格啊,我一直没搞懂判断变量等于空格这部分,原来是这样啊,......... 判断字符是否为空和是否为空格是有区别的. 谢了....
我用的是 if "%a:~-1,1%"=="" (set a=%a:~0,-1% && goto ss) 难怪不对.

bjsh
版主 的两个方法好像都不能达到我的目的,可能是我开始说的不够清楚吧


@echo off
for /f "delims=" %%i in (a.txt) do set a=%%i
:Loop
if " " == "%a:~-1,1%" (set "a=%a:~0,-1%" && goto loop)
echo %a%结束
pause




[ Last edited by 26933062 on 2007-6-2 at 03:26 PM ]
2 发表于 2007-06-02 09:55 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
也可以为扩展名指定子字符串。

%PATH:~10,5%

会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 个(偏
移量 10)字符开始的五个字符。如果没有指定长度,则采用默认
值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数,
使用的数字则是环境变量数值长度加上指定的偏移量或长度。

%PATH:~-10%

会提取 PATH 变量的最后十个字符。

%PATH:~0,-2%

会提取 PATH 变量的所有字符,除了最后两个。
3 发表于 2007-06-02 10:57 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
首先提出:
我不知道你 set a="wet " 是想告诉我们有空格的存在而加的引号;
还是 本身就是这样的;

1) set "a=wet "

如果是从文本读入 ;
在某些情况下可以 让delims 默认为空格;
这样取得的 参数就是不带空格的 此时用 set 赋值; 就不会出现空格;

也可以通过上述的原理进行变通;
例如
可以
set "a=wet "
for /f %%a in ('echo %a%') do set b=%%a
不过这种方法效率有点低;

也可以利用 call

set "a=wet "
call :change %a%
pause & goto :eof
:change
set b=%1

2) set a="wet "
set a="wet "
for /f %%a in ('echo %a%') do set b=%%~a
4 发表于 2007-06-02 11:21 ·  中国 北京 中国中信股份有限公司
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
有时候,老实一点未必就是愚钝的表现:
@echo off
set /p str=输入带空格字符串:
:Loop
if " " == "%str:~-1,1%" (set "str=%str:~0,-1%" && goto loop)
echo %str%结束
pause
goto :eof

特殊字符未作防范。
5 发表于 2007-06-02 11:53 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
扔给vbs去RTrim
6 发表于 2007-06-02 17:49 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
sed "s/ *$//g;s/.*/开始&结束/" a.txt
7 发表于 2007-06-02 19:41 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
我以为你只是 想除掉 最后的 空格 ;
我写的那些想做到 去除 包括中间的空格的话;还需要一些改动;

之所以 没有提出截取字符方法;
是因为我觉得他的效率太低;

如果只是为了处理 少部分; 还是有用的;
论坛跳转: