如何获取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