在第一个数字Windows批处理文件之前提取字母

时间:2017-11-16 22:23:07

标签: batch-file

我制作的批处理程序将遍历文本文件的每一行。每一行都有一个类似的格式,因为它是一系列字母,然后是无或数字,后跟更多字符,如下所示:

RRR14
AMRCC1M_08
TT

我需要能够在运行代码时使用整个字符串和第一个数字之前的字母(即var1 = RRR14和var2 = RRR),但我不确定如何提取只是领先字母长度和每个字符串的值不同。此外,因为不保证字符串中的数字,我不知道如何去做。

编辑:使用建议的解决方案,我遇到了一个新问题。似乎var2没有正确更新。我运行代码:

for /f "tokens=1" %%a in (%1.txt) do (
for /f "tokens=1 delims=0123456789" %%G in ("%%a") do set var2=%%G
echo %var2%
echo %%a
echo.
)

让所有的ECHO尝试调试,我得到:

>set var2=RRR
JIKK
RRR14

其中JIKK似乎来自JIKK8(文本文件的最后一行)。我不确定我是否错误地引用了变量或者这里没有什么工作

1 个答案:

答案 0 :(得分:3)

您可以使用FOR /F命令并将所有10个数字用作DELIMS选项。

所以在你的例子中。

FOR /F "TOKENS=1 delims=0123456789" %%G IN ("RRR14") DO SET var2=%%G

因此,根据您在问题中更新的新代码,您有两种选择。

第一个选项是创建另一个带括号的代码块并直接使用FOR变量。

@ECHO OFF
for /f "tokens=1" %%a in (%1.txt) do (
    for /f "tokens=1 delims=0123456789" %%G in ("%%a") do (
        echo %G%
        echo %%a
        echo.
    )
)

您的第二个选择是使用延迟扩展来引用变量而不需要额外的带括号的代码块。

@ECHO OFF
setlocal enabledelayedexpansion
for /f "tokens=1" %%a in (%1.txt) do (
    for /f "tokens=1 delims=0123456789" %%G in ("%%a") do set "var2=%%G"
    echo !var2!
    echo %%a
    echo.
)