如何修复我的批处理循环以存储最后一行?

How to fix my batch for loop to store the last line?

我有一个名为 cmd.pid 的文件,在这个文件中我存储了计算机上所有 cmd.exe 运行 的 pid。

我需要存储文件的最后一行(因为它是最后打开的命令)

这是在cmd上发送命令window感谢我保存的pid

for /f "skip=2 delims=" %%i in ('type "mypath\cmd.pid"') do set "line=%%i" & goto done
:done
echo line^=!line!

我的文件第 3 行的值不在 !line 中! 程序在我启动时停止。

这是我的 cmd.pid 文件存储:

16992      

12300      

第一行是16992,第二行是空白,最后一行是12300。 你看不到它但是每个 pid

之后都有空格(正好是 6 个)

问题是:

  • 我路径中的一个文件夹有一个 space => 我重命名它以删除 space
  • 循环的第一个问题:Missing Operand=> 我删除了 do set /a "line=%%i"/a 因为我不使用它
  • 循环的第二个问题:ECHO is off 它发生在 echo !line! 不在循环中但在循环中时正在工作,所以我在 goto循环结束离开它。现在我可以 echo !line! 在循环之外没有任何问题。
  • 第三个问题是使用 skip=2 delims=。我不知道为什么,但它是 "unexpected".

这是最终的循环代码:

for /f "delims= skip=1" %%i in ('type "mypath\cmd.pid"') do (
    set "line=%%i"
    goto done
)
:done
echo !line!
pause

此代码不会在 pid 末尾添加“0”,您可以 select 使用 skip=n-1.

第 n 行

最简单的方法是删除指令

goto done

并完全删除 skip=?(尽管它不会造成任何伤害。)

这样,从文件中读取的每个值都会依次分配给 line,因此当 for 循环在文件末尾终止时,最后一个值仍然存在。