从变量中获取字符串的最后一个字符 Windows NT batch CMD

Get last character of a string from a variable Windows NT batch CMD

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

我需要 return 变量的最后一个字符。通常我会使用 %foo:~-1% 到 return 尽管这在 Windows NT 上不起作用。

我看过WinNT版的set /?无济于事。

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

我想到 运行 一个脚本来使用多种方法之一检查 str 长度,然后 运行 !foo:~%x%,1!但据我所知,我无法使其正常工作的原因是 WinNT 中缺少延迟扩展,并且我希望能够简单修复的内容需要大量编码。

有什么解决办法吗?

谢谢

@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,那么您可以省略一种字母字符。

@Magoo

我想我已经整理好了

set string= = 1 

没有错误我修改了如下代码。虽然循环尝试

时出现 "The syntax of the command is incorrect" 错误,但我得到了一个输出
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%