2014-01-14 120 views
0

我想设置一个变量“directusepermission”作为txt文件的第一行。cmd - 获取txt内容的第一行

组/ P directusepermission = <%〜DP0 \ directuse.txt-一线

因此,我希望仅第一行。我该怎么做?

+0

见http://stackoverflow.com/questions/1295068/windows-equiv-of-the-head-command的一些想法。在'nix中,一个人会使用'head'命令...该链接讨论cmd替代品 – Floris

+0

重新阅读该问题。我希望得到第一行**变量**。 – user3186610

+0

我认为获得第一条线是“让它变成一个变量”的第一步。你有没有看到http://stackoverflow.com/a/7827243/1967396? – Floris

回答

1

你有什么应该就够了。

set /p "var="<file 

<file set /p "var=" 

将读取file第一行到可变var

在您的代码中,问题可能是当前批处理文件的路径。如果它包含空格,则必须引用文件名。

set /p "directusepermission=" < "%~dp0\directuse.txt" 

而且,读变量时,这样你就需要检查

  • 如果要读取的文件不存在变量的以前的内容没有改变
  • 如果第一文件中的行是空的,变量的前一个内容没有变化
  • 如果第一行只包含空格,这将是变量的内容
  • t因此,只有制表符的行被认为是空的,并且变量值没有变化

您也可以使用for /f命令遍历文件内容。在这种情况下,不存在的文件“问题”仍然存在,但空行会被忽略,如果它们为空或仅包含空格或制表符。

但是,为了仅获得第一行,您将需要一些代码来确定只有第一行将被赋值给变量。

这遍历所有的文件内容,但只分配第一行到变量。对于单行或小文件,这是最简单的。 tokens=*要求for命令检索所有行并已包含useback参数以避免引用的文件名被视为要处理的字符串。

set "var=" 
for /f "tokens=* usebackq" %%f in ("file") do if not defined var set "var=%%f" 

这仅检索文件的第一行,但需要一个aditional的标签从哪里跳出来摆脱for命令

for /f "tokens=* usebackq" %%f in ("file") do set "var=%%f" & goto endLoop 
:endLoop 

如果你知道哪些内容是要行检索,文件可以被过滤,只获得所需的行。这将返回只有数行从开始到该行的结束,最后一行(请记住,它遍历返回线以上)将asigned给变量

for /f "tokens=*" %%f in ('findstr /r "^[0-9][0-9]*$" <"file"') do set "var=%%f" 
0
for /f "delims=" %%a in (%~dp0\directuse.txt) do set directusepermission=%%a&goto done 
:done 

应该就足够了。