如何获取 windows .bat 文件中捕获的命令中的所有参数

how to get all the arguments in a command captured in a windows .bat file

grep -P  "ERROR.+SQLTransientConnectionException" uts.log  | wc -l

我正在尝试 copy/capture 将上述(上一个)命令添加到剪贴板。
我的尝试是一个包含以下内容的批处理文件 ec.bat

echo %* | clip

但是,当我在之前的 运行 命令中尝试这样做时,如下所示

ec.bat grep -P  "ERROR.+SQLTransientConnectionException" uts.log  | wc -l

它只复制了 grep 部分(如下所示)而不是整个命令行。它省略了竖线 (|) 和 "wc -l"

grep -P  "ERROR.+SQLTransientConnectionException" uts.log

如何 get/request 整个命令行?是否有包含上一个命令的环境变量?是否有类似于 bash/zsh 特殊参数的解释 here

我从另一个角度尝试了这个问题。我试图找到命令提示符的历史记录。

https://www.itechtics.com/view-command-prompt-history-windows/#:~:text=Open%20CMD%20from%20the%20Start,within%20the%20window%20of%20CMD.,我发现你可以输入命令“doskey /history”来给出历史。我可以使用 tail 来抓取之前的命令并根据需要进行处理。

我想这有助于从不同角度解决问题。

您可以使用 doskey 宏。

doskey ec=toclip.bat "$*"

并在批处理文件中toclip.bat

@echo off
set line=%*
setlocal EnableDelayedExpansion
REM *** Remove the surrounding quotes from line
for /F "delims=" %%L in ("!line!") DO (
    endlocal
    (echo(%%~L) | clip
)

出乎意料,但 doskey 宏优先于正常 cmd.exe 解析。
这会导致您的论点周围出现引号。

但它会失败,如果你的论点本身包含引号,比如

ec grep "hello|world" file