cmd - 获取txt内容的第一行

时间:2014-01-14 05:14:16

标签: text cmd

我想将变量“directusepermission”设置为txt文件的第一行。

  

set / p directusepermission =<%~dp0 \ directuse.txt-first-line

所以我只想要第一行。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

你所拥有的应该是足够的。

set /p "var="<file

<file set /p "var="

会将file中的第一行读入变量var

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

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

此外,以这种方式阅读变量时,您需要检查

  • 如果要读取的文件不存在,则变量的先前内容不会更改
  • 如果文件中的第一行为空,则不会更改变量的先前内容
  • 如果第一行只包含空格,则这将是变量的内容
  • 该行末尾的制表符将被忽略,因此,仅包含制表符的行被视为空,且变量值未更改

您还可以使用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

如果您知道要检索的行中有哪些内容,则可以过滤文件以仅获取所需的行。这将仅返回从行的开头到结尾的数字行,最后一行(记住它在返回的行上迭代)将被赋予变量

for /f "tokens=*" %%f in ('findstr /r "^[0-9][0-9]*$" <"file"') do set "var=%%f"

答案 1 :(得分:0)

for /f "delims=" %%a in (%~dp0\directuse.txt) do set directusepermission=%%a&goto done
:done

应该足够了。