如何从CMD上的.txt文件中的字符串中提取单个数字?

时间:2017-06-14 17:00:21

标签: batch-file cmd

我尝试使用Google搜索,但我找不到明确的解决方案,所以我问你。

我不知道怎么放这个,但是,假设我们有一个TEXTFile.txt,其中包含一个带有随机字母和数字的字符串(如AJS12U3254FU8AD)。现在,我想要做的是让用户输入一个set /p number=的数字,然后从该数字代表的字符串中回显数字/字符。例如(在前面的字符串示例中)如果用户输入数字3,我希望批处理脚本回显字母S,如果他输入4到echo 1,依此类推。

在我的小经验中,我认为这个问题归结为来自变量的某些数字,如echo %var:~0,1%,但不是使用整数来指定数字,我想在该过程中插入用户的数字。类似于echo %var:~0,%number%%

这可能吗?或者还有其他方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:0)

批处理中的变量(命令行参数除外)与%缠绕在一起,因此您无法编写%var:~0,%number%%,因为变量在第一个%结束并且结果在语法错误

您需要使用delayed expansion

setlocal EnableDelayedExpansion
for /f "delims=" %%x in (TEXTFile.txt) do set var=%%x
set /p number="Input number: "
echo !var:~%number%,1!

答案 1 :(得分:0)

假设您有想要的文本行作为变量行,您可以执行类似

的操作
@echo off
set number=3
set line=AJS12U3254FU8AD

for /l %%i in (%number%,1,%number%) do (
    call set character=%%line:~%%i,1%%
)
echo %character%

答案 2 :(得分:0)

强制延迟扩展(与变量中的exclcmation标记不冲突)的另一种方法是使用伪调用。

  • 该调用强制另行解析该行。
  • 第一遍解析了%number%,而%%加倍 减少到一个。
  • 第二遍解析了现在的单%
@Echo off
Set "var=AJS12U3254FU8AD"
set /p "number=Enter a number:"
Call echo %%var:~%number%,1%%