for /f 命令无法正常工作(对我来说)

for /f 命令无法正常工作(对我来说)

我遇到了一个问题。我是批处理方面的初学者和菜鸟,所以如果这是一个愚蠢的问题,请原谅。我创建了一个这样的文本文件:

User/Jack

Password/Pancake

Status/Hello

我只想显示密码,所以我使用了 for /f 命令。;

for /f "delims=/ skip=1 tokens=2" %%a in (Users.txt) do (
    set Password=%%a 
)

当我尝试这样做时,cmd 窗口中弹出了“Hello”。我已经尝试修复这个问题几个小时了,但还没有找到解决办法。你们能帮我吗?

提前致谢!

答案1

在每个循环(迭代)中,您都会将文本标记分配给“密码”,覆盖其之前包含的内容。因此,在 For 循环结束后,“密码”将包含,Hello因为它是您分配给“密码”的最后一个内容。

我假设您echo password在循环后有或类似的内容来显示它;如果是这样,将其移入循环中,以便在循环的每次迭代中显示变量。

答案2

您已经接近解决方案,但您跳过了第一行,然后处理剩余的每一行,因此结果值始终来自最后的线。

我想到的一个解决方案是:

for /f "delims=/ tokens=1*" %%a in (Users.txt) do (
    if "%%a" == "Password" set Password=%%b 
)

这将读取每一行并将其拆分为%%a( 之前的文本/)和%%b( 之后的行的其余部分)/Password仅当第一个字段匹配时才会设置变量。

答案3

有几种方法可以解决这个问题,但在你的情况下最简单的方法是重新排序“users.txt”,并将最后一行设置为“Password/Pancake”,并将“skip”值设置为 2。这将解决你的问题。

不过,我建议以更通用的方式重做脚本,以便您实际上可以获取您不知道其位置的东西。

相关内容