我遇到了一个问题。我是批处理方面的初学者和菜鸟,所以如果这是一个愚蠢的问题,请原谅。我创建了一个这样的文本文件:
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。这将解决你的问题。
不过,我建议以更通用的方式重做脚本,以便您实际上可以获取您不知道其位置的东西。