从变量Windows NT批处理CMD获取字符串的最后一个字符

时间:2017-04-07 01:57:33

标签: batch-file variables cmd set windows-nt

尝试使我的批处理兼容各种Windows版本,包括Windows NT。

我需要返回变量的最后一个字符。通常我会使用%foo:〜-1%返回,虽然这在Windows NT上不起作用。

我已经阅读过WinNT版本的set /?无济于事。

使用%foo:~x,1%,其中x是最后一个字符的位置对我来说不起作用,因为变量长度会改变。

我想运行一个脚本来检查str长度,然后运行!foo:〜%x%,1!但据我所知,我无法让它工作的原因是WinNT缺乏延迟扩展,而且我希望能够做一些简单的修改。

任何想法如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:1)

@ECHO Off
SETLOCAL

SET string=abcd
:loop1
SET lastchar=%string:~0,1%
SET string=%string:~1%
IF NOT "%string%"=="" GOTO loop1

ECHO last char=%lastchar%

SET string=wxyz
:loop2
SET lastchar=%string:~99,1%
SET string=q%string%
IF "%lastchar%"=="" GOTO loop2

ECHO last char=%lastchar%

GOTO :EOF

我无法再记住set "var=value"语法是否适用于NT。如果是这样的话,那么该语法更适合于绕过看不见的尾随空间问题。

findstr方法:

set string=pqrs
for %%a in (a b c d ... o p q r s ...z A ... Z etc.) do echo %string%|findstr /e /L /C:"%%a">nul do if not errorlevel 1 set lastchar=%%a

当然,如果您将/i应用于findstr,则可以省略一例字母字符。

答案 1 :(得分:0)

@Magoo

认为我已将其排序

set string= = 1 

没有错误我修改了如下代码。我得到一个输出,虽然"命令的语法不正确"循环尝试时出错

set lastchar== 1

这就是我添加2> nul来抑制错误的原因

@ECHO Off
SETLOCAL

SET string=abcd = 1
:loop1
SET lastchar=%string:~1,1% 2>nul
SET string= %string:~2%
IF NOT "%string%"=="" GOTO loop1

ECHO last char=%lastchar%