0

试图使我的批处理兼容包括 Windows NT 在内的各种 Windows 版本。

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

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

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

我想运行一个脚本以使用多种方法之一检查 str 长度,然后运行 ​​!foo:~%x%,1! 但据我所知,我无法让它工作的原因是 WinNT 中缺乏延迟扩展以及我希望能够简单修复的大量编码。

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

谢谢

4

2 回答 2

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

当然,如果你申请/ithenfindstr你可以省略一个字母字符的大小写。

于 2017-04-07T05:28:33.073 回答
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%
于 2017-04-07T09:29:44.187 回答