返回列表 发帖

[文本处理] 批处理如何判断变量最后一位是否为空格,如是则去掉?

@echo off
set end=" "
set sp=" "
if "%end%" equ "%sp%"  (echo change
) else (echo no change)
pauseCOPY
老哥们我用这个代码为什么不行啊,明明用下面这个代码是可以,怎么赋给变量就不行了。
@echo off
if " " equ " "  (echo change
) else (echo no change)
pauseCOPY
是不能用这种方法吗?如果不能的话,怎么判断变量最后一位是否为空格,如是则去掉。

@echo off
set str=" "
setlocal enabledelayedexpansion
if "!str:~-1!" equ " " (
set "str=!str:~0,-1!"
)
endlocal & set "str=%str%"
rem echo [%str%]
pauseCOPY

提示:如此赋值变量,此时 str的值包括双引号
bat小白,请多指教!谢谢!

TOP

本帖最后由 aloha20200628 于 2024-12-2 14:02 编辑

回复 1# YSYHZ

一楼第一段代码改为如下即可
@echo off
set end=" "
set sp=" "
if %end% equ %sp%  (echo change) else (echo no change)
pauseCOPY
或者改为如下亦可
@echo off
set "end= "
set "sp= "
if "%end%" equ "%sp%"  (echo change) else (echo no change)
pauseCOPY

TOP

回复 1# YSYHZ

可用sed( http://bcn.bathome.net/tool/4.9/sed.exe )删除每一行拖尾的"空白字符"(空格,制表符)
sed -i.bak -r "s/[ \t]*$//" 1.txtCOPY

TOP

本帖最后由 qixiaobin0715 于 2024-12-2 08:27 编辑
@echo off
set "str=  a.  bc     "
for /f "delims=" %%i in ("%str%") do echo,%%~nxi
pauseCOPY
注意2点:
1.变量值中不能出现字符“:/\”;
2.变量值结尾不能是“.+空格”的形式,中间出现此种形式没关系。
否则会出问题。

TOP

可以用变量截取
截取最后一个: %变量名:~-1,1%
除了最后一个: %变量名:~0,-1%
参考
http://www.bathome.net/viewthread.php?tid=996

TOP

@echo off
set end=" "
set sp=" "
if end == sp  (echo change
) else (echo no change)
pauseCOPY
l老哥们改成这样子倒是能运行了,但是返回值为no change 对不上啊,应该返回change才对啊

TOP

返回列表