[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

  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
复制代码
是不能用这种方法吗?如果不能的话,怎么判断变量最后一位是否为空格,如是则去掉。

  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才对啊

TOP

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

TOP

本帖最后由 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.变量值结尾不能是“.+空格”的形式,中间出现此种形式没关系。
否则会出问题。

TOP

回复 1# YSYHZ

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

TOP

本帖最后由 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
复制代码

TOP

  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的值包括双引号
bat小白,请多指教!谢谢!

TOP

返回列表