繁体   English   中英

如何忽略回显并获取命令执行日志

[英]How to ignore echo off and get the commands execution log

我有一个只读脚本,第一行关闭了回显。 例如带有内容的script.bat

@echo off
REM bunch of logic goes here
@echo on

是否有可能以某种方式欺骗它并以任何方式回显/打印所有命令? 我可以在脚本调用之前/之后调用任何东西,只是不能更改脚本代码本身。 我想它会是这样的:

REM what can I do here?
call script.bat
REM execution log printed?

这个冗长的命令逐行读取sample.bat ,对于没有明确指出@echo off每一行,它会执行它,有效地跳过@echo off

@for /F "tokens=*" %a in (sample.bat) do  @if NOT "%a" == "@echo off" %a

对于具有关闭命令回显的偷偷摸摸的方式的复杂 bat 文件,它可能并不完美,但它应该适用于大多数基本情况:

更简单的方法,即批处理文件只读是复制文件,删除@echo off并运行复制的文件。

如果这不可能,您可以尝试使用 Jeb 发现的缓冲区溢出 创建一个包含以下内容的批处理文件

((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

(比256个左括号多一点),打开一个cmd实例并执行。 然后,从同一个cmd实例调用script.bat 如果缓冲区溢出不干扰,也许您可以看到执行的命令。

此刻我不记得其他方式。

注意:只是为了完成,您所要求的在技术上是可行的,但不能直接解决。 前段时间,为了解决有关批处理文件调用、 goto命令和标签的问题,我修补了cmd.exe进程的副本以避开对何时输出正在执行的命令的任何检查,但此过程取决于确切版本的cmd可执行文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM