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

如何获取windows.bat文件中捕获的命令中的所有参数,windows,batch-file,command-line,command-line-arguments,Windows,Batch File,Command Line,Command Line Arguments,我试图将上述(上一个)命令复制/捕获到剪贴板。 我尝试的是一个包含以下内容的批处理文件ec.bat grep -P "ERROR.+SQLTransientConnectionException" uts.log | wc -l 但是,当我在前面的run命令上尝试这样做时,如下所示 echo %* | clip 它只复制了grep部分(如下所示),而不是整个命令行。它遗漏了管道(|)和“wc-l” 如何获取/请求整个命令行?是否存在包含上一个命令的环境变量?是否有类似于bash/zsh的

我试图将上述(上一个)命令复制/捕获到剪贴板。
我尝试的是一个包含以下内容的批处理文件ec.bat

grep -P  "ERROR.+SQLTransientConnectionException" uts.log  | wc -l
但是,当我在前面的run命令上尝试这样做时,如下所示

echo %* | clip
它只复制了grep部分(如下所示),而不是整个命令行。它遗漏了管道(|)和“wc-l”


如何获取/请求整个命令行?是否存在包含上一个命令的环境变量?是否有类似于bash/zsh的特殊参数,如explained

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

从中,我发现您可以键入一个命令“doskey/history”,该命令提供历史记录。我可以使用tail获取前面的命令,并根据需要处理它


我想从不同的角度解决问题会有所帮助。

您可以使用doskey宏

doskey ec=toclip.bat“$*”

在批处理文件
toclip.bat

grep -P  "ERROR.+SQLTransientConnectionException" uts.log
这是出乎意料的,但doskey宏比正常的cmd.exe解析具有更高的优先级。
这会导致你的论点被引用

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

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

@(Echo=%cmdline%)| Clip
是否令人满意?管道(
)不是批处理文件的参数,因此
%*
不反映它,也不反映它。由于管道的任何一部分都是在新的
cmd
子实例中执行的,因此我认为管道中涉及的批处理文件不可能“看到”在父
cmd
实例中执行的整个命令行……那么另一种方法呢,假设只有一个批处理脚本实例在运行:检查正在运行的进程的命令行,并在其中搜索
ec.bat
?@aschipfl:谢谢。这一假设目前仍然适用。我将尝试您的替代方法,但我认为cmd.exe将有类似于此用例的bash和其他shell。对于其他正在寻找解决方案的人,我可以在ec.bat之后传递一个引号,并在命令行末尾关闭该引号。删除ec.bat中的这些引号,然后将完整命令复制到剪贴板。但圣杯是在不添加引号的情况下获得完整的命令——因此,我将尝试@aschipfl建议的方法。
@echo off
set line=%*
setlocal EnableDelayedExpansion
REM *** Remove the surrounding quotes from line
for /F "delims=" %%L in ("!line!") DO (
    endlocal
    (echo(%%~L) | clip
)
ec grep "hello|world" file