批处理菜单轮廓和设计[重复]

2023-12-04

不久前,我在谷歌上搜索如何制作具有更“专业外观”的批处理菜单,而不是使用以下符号:

|=====|
|-----|
|_____|

批量制作菜单周围的轮廓。 但我没有运气。 今天无意间发现了这篇文章:

https://web.archive.org/web/20151204182221/https://http-server.carleton.ca/~dmcfe/menu.html

它解释说通过使用 ms-dos (edit.com) 我可以做到这一点。 但由于我的电脑是 64 位 win 10。我没有 edit.com 所以....我怎样才能让这种菜单手动显示?(printing special characters shown on left side of the header "STEP 3, Lines, Lines, Lines.")


这是我一直在开发的批处理 + PowerShell 菜单制作器。在批处理部分中设置值,PowerShell 内容将根据需要自动调整大小和重新定位。当做出选择时,控制台缓冲区将恢复其以前的内容,从而有效地消失菜单。

它看起来像这样:

arrow navigated menu

这是代码。使用 .bat 扩展名保存它。

<# : Batch portion
@echo off & setlocal enabledelayedexpansion

set "menu[0]=Format C:"
set "menu[1]=Send spam to boss"
set "menu[2]=Truncate database *"
set "menu[3]=Randomize user password"
set "menu[4]=Download Dilbert"
set "menu[5]=Hack local AD"

set "default=0"

powershell -noprofile "iex (gc \"%~f0\" | out-string)"
echo You chose !menu[%ERRORLEVEL%]!.

goto :EOF
: end batch / begin PowerShell hybrid chimera #>

$menutitle = "=== MENU ==="
$menuprompt = "Use the arrow keys.  Hit Enter to select."

$maxlen = $menuprompt.length + 6
$menu = gci env: | ?{ $_.Name -match "^menu\[\d+\]$" } | %{
    $_.Value.trim()
    $len = $_.Value.trim().Length + 6
    if ($len -gt $maxlen) { $maxlen = $len }
}
[int]$selection = $env:default
$h = $Host.UI.RawUI.WindowSize.Height
$w = $Host.UI.RawUI.WindowSize.Width
$xpos = [math]::floor(($w - ($maxlen + 5)) / 2)
$ypos = [math]::floor(($h - ($menu.Length + 4)) / 3)

$offY = [console]::WindowTop;
$rect = New-Object Management.Automation.Host.Rectangle `
    0,$offY,($w - 1),($offY+$ypos+$menu.length+4)
$buffer = $Host.UI.RawUI.GetBufferContents($rect)

function destroy {
    $coords = New-Object Management.Automation.Host.Coordinates 0,$offY
    $Host.UI.RawUI.SetBufferContents($coords,$buffer)
}

function getKey {
    while (-not ((37..40 + 13 + 48..(47 + $menu.length)) -contains $x)) {
        $x = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown').VirtualKeyCode
    }
    $x
}

# http://goo.gl/IAmdR6
function WriteTo-Pos ([string]$str, [int]$x = 0, [int]$y = 0,
    [string]$bgc = [console]::BackgroundColor, [string]$fgc = [Console]::ForegroundColor) {
    if($x -ge 0 -and $y -ge 0 -and $x -le [Console]::WindowWidth -and
        $y -le [Console]::WindowHeight) {
        $saveY = [console]::CursorTop
        $offY = [console]::WindowTop       
        [console]::setcursorposition($x,$offY+$y)
        Write-Host $str -b $bgc -f $fgc -nonewline
        [console]::setcursorposition(0,$saveY)
    }
}

function center([string]$what) {
    $what = "    $what  "
    $lpad = " " * [math]::max([math]::floor(($maxlen - $what.length) / 2), 0)
    $rpad = " " * [math]::max(($maxlen - $what.length - $lpad.length), 0)
    WriteTo-Pos "$lpad   $what   $rpad" $xpos $line blue yellow
}

function menu {
    $line = $ypos
    center $menutitle
    $line++
    center " "
    $line++

    for ($i=0; $item = $menu[$i]; $i++) {
        # write-host $xpad -nonewline
        $rtpad = " " * ($maxlen - $item.length)
        if ($i -eq $selection) {
            WriteTo-Pos "  > $item <$rtpad" $xpos ($line++) yellow blue
        } else {
            WriteTo-Pos " $i`: $item  $rtpad" $xpos ($line++) blue yellow
        }
    }
    center " "
    $line++
    center $menuprompt
    1
}

while (menu) {

    [int]$key = getKey

    switch ($key) {

        37 {}   # left or up
        38 { if ($selection) { $selection-- }; break }

        39 {}   # right or down
        40 { if ($selection -lt ($menu.length - 1)) { $selection++ }; break }

        # number or enter
        default { if ($key -gt 13) {$selection = $key - 48}; destroy; exit($selection) }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

批处理菜单轮廓和设计[重复] 的相关文章

  • 在 Windows 11 上无需管理员权限即可运行 Visual Studio 2022

    我在 Windows 11 上安装了 Visual Studio 2022 当我启动它时 它始终以管理员权限运行 我想在没有管理员权限的情况下运行它 我的 Windows 只有一个帐户 该帐户具有管理员权限 x 我做了什么 确认VS2022
  • R 脚本自动化时的不同结果

    以下命令对 pdf 文件执行 Ghostscript 这pdf file变量包含该 pdf 的路径 bbox lt system paste C gs gs8 64 bin gswin32c exe sDEVICE bbox dNOPAUS
  • 如何让 git 和 copSSH 在正确的目录中查找密钥?

    我刚刚安装了 Windows 版 copSSH 当我启动它时 我得到一个目录C copSSH home Nick ssh其中有我的酒吧和私钥 当我通过 Cygwin bash 窗口访问此目录时 使用 ssh 用户 主机 我很高兴地登录了 但
  • Windows Workflow Foundation 4 (WF4) 延迟

    我正在与 Visual Studio 2010 的候选版本一起使用 Wf4 编写一个用于批准资源请求的新工作流程 在我的工作流程中 如果请求未获得批准 我希望请求在几天后过期 我们在 WF 3 5 Visual Studio 2008 中通
  • 如何更改选项卡控件的名称

    我在 C WinForms 应用程序中使用选项卡控件 我想更改选项卡的标题 默认情况下它们是 tabPage1 tabPage2 等 一种无需代码即可实现的懒惰方法 选择选项卡控件 Go to properties use F4 to do
  • .bat 文件将文件排序到文件夹中

    对于我的图片集 我希望文件夹中的所有图片按日期自动分类到文件夹中 幸运的是 这些文件已经以时间戳命名 2012 07 15 12 21 06 jpg 2012 07 15 12 21 26 jpg 2012 07 16 12 12 50 j
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato
  • Git 扩展 - 无法在 Windows 上推送到网络驱动器中的 git bare 存储库

    我正在 Windows 上学习 git 我已经安装了 Git 扩展 版本 2 47 3 并使用了它 我在我的 C 单元中创建了一个裸存储库 作为中央存储库 并在硬盘中的其他任何位置创建了个人存储库 我对硬盘中的这两个存储库进行提交 推送和拉
  • C# - 方法必须有返回类型

    我在调用 C 中的方法时遇到问题 不断收到消息 方法 计算 必须有返回类型 using System Diagnostics namespace WindowsFormsApplication1 public partial class F
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • Vim 在 Mingw 上表现异常

    我在 MinGW 4 6 2 上的 Vim 表现得很奇怪 例如 在插入模式下按 Backspace 会删除字符 但我必须用箭头键移动光标才能删除的字符消失 而且它也会使我退出插入模式 另一个例子 按 Del 删除字符有时会生成奇怪的字符 例
  • 自定义波特率,redux

    我遇到的问题详述如下自定义波特率 https stackoverflow com questions 7714060 custom baud rate SetCommState 波特率 921600 失败 但波特率 115200 成功 尽管
  • 如何使用来自 Microsoft-Windows-NDIS-PacketCapture 提供程序的实时 ETW 事件?

    更大的问题是一般如何使用实时 ETW 网络堆栈事件 但我特别感兴趣Microsoft Windows NDIS PacketCapture 提供程序 所有其他网络堆栈提供程序都部分工作 但 NDIS PacketCapture NDIS P
  • 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    我有兴趣让 TensorFlow 在 Windows 上运行 但目前我意识到这是不可能的 因为某些依赖项无法在 Windows 上使用 例如巴泽尔 之所以出现这种需求 是因为据我目前了解 从 TensorFlow 访问 GPU 的唯一方法是
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • Windows 窗口对接

    我想知道如何在 Windows 中将窗口停靠 捕捉到屏幕的一侧 最好使用直接的 Win32 API 我正在寻找的效果就像任务栏 一个在屏幕上有保留空间的窗口 因此最大化另一个窗口会使该窗口占据屏幕的其余部分 但使我的窗口保持在适当的位置并可
  • 对于多重继承,使用隐式转换而不是 QueryInterface() 是否合法?

    假设我有一个类实现两个或多个 COM 接口 正如here https stackoverflow com questions 1742848 why exactly do i need an explicit upcast when imp
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔

随机推荐

  • 小计 <> 行总和

    我是 DAX 的新手 所以请耐心等待 用最简单的术语来说 我想将欧洲以外的所有区域的度量金额加倍 然后将结果相加 以下是 DAX 的一些示例 DEFINE measure Fact test CALCULATE IF SELECTEDVAL
  • Web 服务与 WCF 服务

    它们之间有什么区别 我什么时候会选择其中一种而不是另一种 这个答案基于一篇不再存在的文章 文章摘要 基本上 WCF 是一个服务层 允许您构建可以使用各种通信机制进行通信的应用程序 有了它 您可以使用点对点 命名管道 Web 服务等进行通信
  • Git 强制推送到 github 的大文件已被删除且不再跟踪而被拒绝

    所以我对 git 还很陌生 并且遇到了一些麻烦 我的本地副本有许多与我的 github 存储库冲突的新更改 但是我的本地副本是正确的 我只想覆盖远程存储库 本地和远程副本有 2 次和 3 次提交的差异 我还意外地将一些非常大的 csv 文件
  • DataGridView 加载速度非常慢。如何优化DataGridView中行的添加?

    datagridview 加载速度非常慢 我该如何优化它 datagridview 有 4 5 千行 我必须根据几个参数动态生成 datagridview 来自数据库的数据 列数 我必须从数据库中的表 id name contact 垂直生
  • 我可以将 JRadioButton 添加到 JTable 中吗

    我尝试添加JRadioButton into JTable通过使用CellEditor and CellRenderer 但我无法添加JRadioButton into JTable 我正在使用 NetBeans 和后端 MySQL 请帮我
  • 如何通过分隔符将数组对象分成两个(或二维数组)

    我想分割一个数组 如下所示 let arrayToSplit Europe France Paris Europe Italy Rome America USA Washington America Canada Ottawa Into l
  • Hive 中的减速器选择

    我有以下记录集来处理 1000 1001 1002 to 1999 2000 2001 2002 to 2999 3000 3001 3002 to 3999 我想使用HIVE处理以下记录集 以便reducer 1将处理数据1000到199
  • 不能从静态上下文中引用非静态方法(方法名())。为什么?

    我对此真的很困惑 我有2节课 Club and 会员资格 在会员资格中我有方法 获取月份 在俱乐部我有加入月份 它采用参数 月份 因此用户输入月份 然后我希望它返回在该特定月份加入的会员资格 我试图从类 Club 中调用 getMonth
  • 方法“getElementsByClassName”无法识别

    我想启动 Windows 资源管理器并登录网站 登录后我想单击注销文本链接 但我收到此错误 Method invocation failed because mshtml HTMLDocumentClass doesn t contain
  • 两个相同的文件根据 C# 的编写方式具有不同的文件大小

    我正在尝试将对象数组序列化为 JSON 格式写入文件 我正在尝试以两种不同的方式编写它 如下所示 ToSerialise Obj new ToSerialise 10 for int i 0 i lt 10 i Obj i new ToSe
  • Django 在文件末尾添加一些奇怪的字符

    当我将文件提交到 django 服务器并且文件名存在于目录中时 我遇到了问题 Django 不会覆盖该文件 但会在名称末尾添加一些字符 我怎样才能添加字符而不是 Django 我的 model py 看起来像这样 class UpLoadF
  • 使用 ggplot2 绘制不同长度的向量

    我有 8 个不同长度的数据向量 MAP 分数 评级的文档数量不同 从 80 到 500 如何将它们读入 R 并在 ggplot2 中将它们绘制为相同的长度 将它们视为从 0 到 1 范围内的不同数量的数据点 它们应该按比例缩小 放大 以便它
  • OCaml 中函数以相反顺序返回列表

    我想从文件中读取一些数字 将它们放入列表中 最后将它们显示在屏幕上 Numbers txt 目前有2 3 5 7 11但是作为输出我得到11 7 5 3 2 unit 为什么会发生这种情况 let rec int list from sb
  • Google App Engine 上的并发请求处理

    我正在几个平台上尝试并发请求处理 该实验的目的是有一个broad衡量某些选定技术的能力界限 我在我的机器上设置了一个 Linux 虚拟机 其中包含一个基本的 Go http 服务器 vanillahttp HandleFunc of the
  • 如何在Linux下不使用QProcess执行shell命令?

    我正在尝试从 Qt 应用程序中读取屏幕分辨率 但不使用 GUI 模块 所以我尝试使用 xrandr grep awk print 1 命令通过QProcess 但它显示警告并且不给出任何输出 unknown escape sequence
  • suds.TypeNotFound:未找到类型:“MerchantCode”

    我正在使用 django 开发一个网络 它处理 wsdl 我有一个处理它的示例代码 但它是用 PHP 编写的 我想将它转换为 python 以用于我的 django 这是 PHP 文件
  • Android 使新的异步任务在后台或 Dropbox Core API 问题中优先于其他任务

    我正在使用 Android 中的核心 API 从 Dropbox 加载多张照片 并在发出请求时对它们进行序列化 我正在将缩略图显示在网格视图中 当用户单击其中一个缩略图时 它会转到另一个活动 它会从服务器获取完整的分辨率版本 它做得很好 但
  • 如何在 Foundry 中解析大型压缩 csv 文件?

    我有一个大型 gzip 压缩 csv 文件 csv gz 上传到一个数据集 该数据集大小约为 14GB 未压缩时为 40GB 有没有一种方法可以使用 Python Transforms 解压缩 读取并将其写入数据集 而不会导致执行器 OOM
  • Pandas:使用 groupby 和函数进行数据帧过滤

    使用Python 3 3和Pandas 0 10 我有一个通过连接多个 CSV 文件构建的 DataFrame 首先 我过滤掉 名称 列中包含特定字符串的所有值 结果看起来像这样 为了简洁起见缩短了 实际上还有更多列 Name ID A 1
  • 批处理菜单轮廓和设计[重复]

    这个问题在这里已经有答案了 不久前 我在谷歌上搜索如何制作具有更 专业外观 的批处理菜单 而不是使用以下符号 批量制作菜单周围的轮廓 但我没有运气 今天无意间发现了这篇文章 https web archive org web 2015120