如何修复我的批处理循环以存储最后一行?
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
循环在文件末尾终止时,最后一个值仍然存在。
我有一个名为 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
.
最简单的方法是删除指令
goto done
并完全删除 skip=?
(尽管它不会造成任何伤害。)
这样,从文件中读取的每个值都会依次分配给 line
,因此当 for
循环在文件末尾终止时,最后一个值仍然存在。