尝试使我的批处理兼容各种Windows版本,包括Windows NT。
我需要返回变量的最后一个字符。通常我会使用%foo:〜-1%返回,虽然这在Windows NT上不起作用。
我已经阅读过WinNT版本的set /?无济于事。
使用%foo:~x,1%,其中x是最后一个字符的位置对我来说不起作用,因为变量长度会改变。
我想运行一个脚本来检查str长度,然后运行!foo:〜%x%,1!但据我所知,我无法让它工作的原因是WinNT缺乏延迟扩展,而且我希望能够做一些简单的修改。
任何想法如何解决这个问题?
由于
答案 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%