Board logo

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

作者: YSYHZ    时间: 4 天前 00:23     标题: 批处理如何判断变量最后一位是否为空格,如是则去掉?

  1. @echo off
  2. set end=" "
  3. set sp=" "
  4. if "%end%" equ "%sp%"  (echo change
  5. ) else (echo no change)
  6. pause
复制代码
老哥们我用这个代码为什么不行啊,明明用下面这个代码是可以,怎么赋给变量就不行了。
  1. @echo off
  2. if " " equ " "  (echo change
  3. ) else (echo no change)
  4. pause
复制代码
是不能用这种方法吗?如果不能的话,怎么判断变量最后一位是否为空格,如是则去掉。
作者: YSYHZ    时间: 4 天前 01:40

  1. @echo off
  2. set end=" "
  3. set sp=" "
  4. if end == sp  (echo change
  5. ) else (echo no change)
  6. pause
复制代码
l老哥们改成这样子倒是能运行了,但是返回值为no change 对不上啊,应该返回change才对啊
作者: Five66    时间: 4 天前 05:25

可以用变量截取
截取最后一个: %变量名:~-1,1%
除了最后一个: %变量名:~0,-1%
参考
http://www.bathome.net/viewthread.php?tid=996
作者: qixiaobin0715    时间: 3 天前 08:25

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

回复 1# YSYHZ

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

作者: aloha20200628    时间: 3 天前 13:54

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

回复 1# YSYHZ

一楼第一段代码改为如下即可
  1. @echo off
  2. set end=" "
  3. set sp=" "
  4. if %end% equ %sp%  (echo change) else (echo no change)
  5. pause
复制代码
或者改为如下亦可
  1. @echo off
  2. set "end= "
  3. set "sp= "
  4. if "%end%" equ "%sp%"  (echo change) else (echo no change)
  5. pause
复制代码

作者: 77七    时间: 3 天前 14:28

  1. @echo off
  2. set str=" "
  3. setlocal enabledelayedexpansion
  4. if "!str:~-1!" equ " " (
  5. set "str=!str:~0,-1!"
  6. )
  7. endlocal & set "str=%str%"
  8. rem echo [%str%]
  9. pause
复制代码

提示:如此赋值变量,此时 str的值包括双引号




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2