从变量中获取字符串的最后一个字符 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%
尝试使我的批处理兼容各种 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%