Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 在.dat文件中存储变量_Variables_Batch File - Fatal编程技术网

Variables 在.dat文件中存储变量

Variables 在.dat文件中存储变量,variables,batch-file,Variables,Batch File,我正在编写一个简单的批处理脚本,将用户输入的内容与.dat中的一行文本进行比较(如有必要,我可以将其放入.txt文件) 到目前为止,我已经有了一种获取用户输入的方法,使用set: 程序使用cd导航到正确的目录: 但是现在我需要一种读取.dat文件内容的方法,并将其与用户输入的内容(给定的密码)进行比较 提前感谢您的帮助, -卢克 编辑: 有关.dat文件的详细信息: 该文件名为config.dat格式如下,其中Geronimo是正确的密码 password = Geronimo 我还计划将其他

我正在编写一个简单的批处理脚本,将用户输入的内容与.dat中的一行文本进行比较(如有必要,我可以将其放入.txt文件)

到目前为止,我已经有了一种获取用户输入的方法,使用set:

程序使用cd导航到正确的目录:

但是现在我需要一种读取.dat文件内容的方法,并将其与用户输入的内容(给定的密码)进行比较

提前感谢您的帮助, -卢克

编辑: 有关.dat文件的详细信息: 该文件名为config.dat格式如下,其中Geronimo是正确的密码

password = Geronimo

我还计划将其他信息存储在其中,我也希望稍后在脚本中将其分配给变量。

如果
.dat
文件仅包含一行定义要比较的密码,则批处理文件可以是:

set /p "uname=Username: "
set /p "pass=Password: "
set /p comparepass=< "C:\Users\Luke\Desktop\Dropbox\BATCH SERVER\USERS\%login_username%\NAME.dat"
if "%pass%"=="%comparepass%" (
:: Insert code for when passwords are the same
) else (
:: Insert code for when passwords are not the same
)
set/p“uname=用户名:”
设置/p“通过=密码:”
set/p comparepass=<“C:\Users\Luke\Desktop\Dropbox\BATCH SERVER\Users\%login\u username%\NAME.dat”
如果“%pass%”=“%comparepass%”(
::在密码相同时插入密码
)否则(
::在密码不相同时插入密码
)
这应该对你有所帮助


Mona

您可以像这样解析文件:

for /f "tokens=1,2 delims== " %%i in ('findstr "=" "ini.dat"') do set "%%i=%%j"
This is the dat file
ist stores the username
user = Luke
and the password
password = Geronimo
and some other stuff...
findstr“=”ini.dat“
将只处理其中包含
=
的行。因此,您也可以将注释存储在文件中,如下所示:

for /f "tokens=1,2 delims== " %%i in ('findstr "=" "ini.dat"') do set "%%i=%%j"
This is the dat file
ist stores the username
user = Luke
and the password
password = Geronimo
and some other stuff...
编辑:

for
用于在多个对象上执行相同的操作。有关更多信息,请参见/?的

特别是在这里:

findstr“=”ini.dat
查找文件
ini.dat
中包含
=

它周围的单个qoutes
告诉
for
命令处理该命令的输出

(…
中的
表示:“对于找到的每一行”

“tokens=1,2 delims==”
表示:“取第一部分和第二部分(称为“token”),其中它们由
=
或空格分隔。”

第一部分(标记)被分配给一个特殊变量
%%i
。由于还有第二个标记,它被分配给以下字母:
%%j

/f
告诉
for
命令要使用的语法(请参见
以获取/?
以了解其他可能性)

中的
表示:“对于找到的每一行”

do set%%i=%%j
将变量(令牌1(%%i)设置为令牌2(%%j)

如果文件中只有一个“数据”,Mona的方法更容易理解,也是更好的方法。如果有更多的数据集(正如您所问的“我也计划在其中存储其他信息”),那么
for
循环是更好的方法


我知道,这很难理解,但值得花时间。在<代码>上使用echo试试,这样你可以更好地了解它的作用。

有很多方法可以读取文件。你能上传你的.dat文件的格式吗?它是否只包含一行我们需要比较的内容。如果是这样,这很容易。如果不是请给出一个.dat文件包含什么的例子。此外,请描述.dat文件的名称。@Monacraft我刚刚更新了这篇文章,提供了一些更多的信息,但我现在将尝试您的解决方案。谢谢。好的,谢谢。我现在将尝试这个方法,但我是批处理新手,我只是想知道这个命令的每个部分都有什么作用。a非常感谢您的解释。再次感谢。只需稍微重新格式化.dat文件,现在这个方法非常有效。谢谢。