【问题标题】:Can you add entries to the command line history from a batch file?您可以将条目从批处理文件添加到命令行历史记录吗?
【发布时间】:2019-03-08 16:15:00
【问题描述】:

在一个命令中从 Windows cmd 编译和执行任何编程语言的源代码可能很麻烦,因为它通常是一个大命令,您必须至少输入一次,然后可以使用 Up- 在命令历史记录中访问它箭头或 F7。

例如,编译和执行 Java 的命令通常如下所示:

cls & javac packagename\Class.java && java packagename.Class

为方便起见,我创建了一个批处理文件,它接受用户输入并回显完整的命令。
然后,您可以复制该行,粘贴并执行一次,然后它会出现在您的命令历史记录中,可以通过向上箭头快速访问。

我想进一步简化最后一步,并将批处理文件创建的命令直接推送到您的命令历史记录中,但我找不到方法。
即使使用@echo on,批处理文件执行的任何命令都不会进入用户的历史记录。
Doskey 的帮助没有提到任何关于添加历史记录项的内容。

谁能想到解决办法?

解决方法

作为一种解决方法,我在批处理文件中使用 doskey 注册了一个宏:

doskey jc=cls ^& javac packagename\Class.java ^&^& java packagename.Class

然后,一旦你运行了批处理文件,你只需要输入 jc 来执行整个命令。
这已经很方便了,所以如果找不到解决方案,我会继续使用它。

【问题讨论】:

  • 那么为什么不将宏保存到文件并通过运行 doskey 轻松加载它们。 doskey /macrofile=mymacros.txt
  • @Squashman 文件名(例如我的示例中的 packagename\Class.java)会随着每个项目而变化,因此充满宏的静态文件没有意义。
  • 您是否阅读了 DOSKEY 命令的帮助。您可以像处理批处理文件一样向宏传递参数。
  • @Squashman 好吧,是的,这就是我实施解决方法的方式。将我的批处理文件生成的命令传递给 doskey 而不是回显它。我想我的问题没有说清楚。
  • 您正在对宏中的文件名进行硬编码。我是说您不必对宏中的文件名进行硬编码。它们可以作为参数传递给宏。

标签: batch-file cmd


【解决方案1】:

您可以使用this method的修改版本:

@if (@CodeSection == @Batch) @then


@echo off

rem Use %SendKeys% to send keys to the keyboard buffer
set SendKeys=CScript //nologo //E:JScript "%~F0"

rem Send to the keyboard buffer the desired line
%SendKeys% "cls & javac packagename\Class.java && java packagename.Class{ENTER}"

rem Read it, so it is inserted in the command-line history
set /P "="

goto :EOF


@end


// JScript section

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2018-09-07
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多