gpt4 book ai didi

batch-file - 批处理脚本,重新格式化 cli 应用程序的输出

转载 作者:行者123 更新时间:2023-12-03 16:35:35 26 4
gpt4 key购买 nike

我有一个非常小的批处理脚本,它正在提取大量文件。该脚本旨在与压缩数据一起交付给其他用户。

现在我的问题是这个压缩工具正在向 cmd 窗口输出大量数据。我认为这会让很多用户感到困惑,因为输出真的是“正在运行”。它基本上显示了每行的百分比以及它如何以何种速度(CPU 和 HDD)解压缩。很多令人困惑的数据,没有人需要看到。现在我真的不喜欢抑制程序的所有输出,在我看来,向用户提供关于减压已经达到多远的反馈很重要。那么是否可以重定向输出并仅读取该输出的前三位并在一行中将其传递给用户?所以用户只看到一个前进的百分比(一行),而不是每秒有 20 个新行的所有这些数据?

下面是它目前的外观示例: http://i.imgur.com/5w5LH.png压缩工具是SREP,我的OS Win 7 x64。

最佳答案

如果你使用windows批处理,它可以做到,但这并不简单,因为你通常会使用FOR/F-Loop来做到这一点。

for/f "delims="%%a in (7z packit ...) 做 ...
问题就在这里,for 循环将首先收集所有数据并等待 7z 结束,然后再处理任何输出行。

唯一的方法是重定向输出,同时扫描它。
但要做到这一点,您需要第二个线程(最好在同一个 cmd 窗口中)。

这样的事情就可以了

@echo off
echo start
setlocal EnableDelayedExpansion
if "%1"=="internal" goto :readThread
start /b cmd /c ""%~f0" internal"

rem *** myPacker pack here and redirect the output
del archive.7z
del output.tmp
start "title" /b /wait cmd /c "%ProgramFiles%\7-Zip\7z" u archive \tempx\*.rtf \tempx\*.pdf ^> output.tmp
echo EOF>>output.tmp
echo ENDE
:waitForEnd
(
> lock (
rem
) || goto :waitForEnd
) 2> nul
exit /b

:readThread

for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
echo ####!cr!x
echo(
<output.tmp (
echo ## before
call :readData 2> lock
echo after
)
exit /b

:readData
set "var="
set /p var=
if "!var!"=="EOF" exit /b
if defined var (
<nul set /p ".=Processing files, currently at !var:~0,4!!CR!"
)
goto :readData

关于batch-file - 批处理脚本,重新格式化 cli 应用程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10504003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com