【发布时间】:2020-10-06 20:39:31
【问题描述】:
grep -P "ERROR.+SQLTransientConnectionException" uts.log | wc -l
我试图将上述(上一个)命令复制/捕获到剪贴板。
我的尝试是包含以下内容的批处理文件 ec.bat
echo %* | clip
但是,当我在之前运行的命令上尝试时,如下所示
ec.bat grep -P "ERROR.+SQLTransientConnectionException" uts.log | wc -l
它只复制了 grep 部分(如下所示)而不是整个命令行。它省略了管道(|)和“wc -l”
grep -P "ERROR.+SQLTransientConnectionException" uts.log
如何获取/请求整个命令行?是否有包含上一个命令的环境变量?是否有类似于解释here 的bash/zsh 特殊参数的东西@
【问题讨论】:
-
@(Echo=%CmdCmdLine%)|Clip会满意吗? -
管道 (
|) 不是批处理文件的参数,因此%*没有反映它,CmdCmdLine也没有反映。由于管道的任一部分都在新的cmd子实例中执行,我认为管道中涉及的批处理文件不可能“看到”在父cmd实例中执行的整个命令行...... -
另一种方法怎么样,依赖于只有一个批处理脚本实例在运行的假设:检查正在运行的进程的命令行并在它们中搜索
ec.bat和|? -
@aschipfl:谢谢。这个假设现在成立。我会尝试你的替代方法,但我认为 cmd.exe 对于这个用例会有类似 bash 和其他 shell 的东西。
-
对于寻找解决方案的其他人,我可以在 ec.bat 之后传递一个引号并在命令行末尾关闭引号。删除 ec.bat 中的这些引号,然后将完整的命令复制到剪贴板。但是圣杯是在不添加引号的情况下获得完整的命令——所以,我会尝试@aschipfl 的建议。
标签: windows batch-file command-line command-line-arguments