使用Windows批处理文件仅从文本文件中获取第一行

时间:2017-09-09 18:12:59

标签: powershell batch-file

我正在尝试从我的文本文件(其数据按降序排序)中获取第一行(实际上是第一个数字),如下所示:

sorted.txt

10
9
8
7
6
5
4
3
2
1

但我得到的输出是1。我希望它是10

我想获取它以便在变量中进一步处理,我使用的代码如下:

set /p lastnum =< sorted.txt
pause
echo !lastnum!
pause
set /A lastNum = lastNum+1
echo !lastnum!
pause

如果我做错了,请告诉我。 sorted.txt的长度每次都会变化,也是第一个值。但总是必须提取最高数字(这将是第一行)。

我也尝试了以下PowerShell脚本:

powershell.exe -Command  $lastnum = Get-Content -LiteralPath "C:\offsite\sorted.txt" | ForEach-Object { $Output += [Int]($_.Trim()) }

但它仍然没有用。

3 个答案:

答案 0 :(得分:2)

 set /p lastnum =< sorted.txt

设置变量%lastnum %(或!lastnum !延迟扩展)。 =之前的空格成为变量名称的一部分。 (=set var = val之后的空格会获得值的一部分。)

set /a的工作方式不同:忽略空格。)

答案 1 :(得分:2)

您发布的代码应该回显文字字符串“!lastnum!”两次,因为您没有启用延迟扩展。但即使启用了延迟扩展或将!更改为%,由于变量名称与=之间的空格在分配期间,您将无法获得正确的结果,这将成为变量名称(%lastnum %)。

将您的代码更改为:

set /p lastnum=<sorted.txt
echo %lastnum%

set /a "lastNum+=1"
echo %lastnum%

它会做你想要的。

或者您可以像这样使用for循环来只读取文件的第一行:

for /f "tokens=* delims=" %%a in (sorted.txt) do (
  set "lastnum=%%~a"
  goto continue
)

:continue
echo %lastnum%

set /a "lastNum+=1"
echo %lastnum%

在PowerShell中,您可以使用以下内容:

[int]$lastnum = Get-Content 'sorted.txt' -TotalCount 1
Write-Output $lastnum

$lastnum++
Write-Output $lastnum

或者像这样:

[int]$lastnum = Get-Content 'sorted.txt' | Select-Object -First 1
Write-Output $lastnum

$lastnum++
Write-Output $lastnum

答案 2 :(得分:0)

使用Powershell,您的命令调用如下所示:

LIKE