我正在尝试从我的文本文件(其数据按降序排序)中获取第一行(实际上是第一个数字),如下所示:
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()) }
但它仍然没有用。
答案 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