我build立了一个批处理程序,目前我正在调整它,使其更具可读性/用户友好性。
我想我的.bat
文件自动设置为在.bat
文件本身最大化。
我在线阅读了START /MAX
,但是这只是打开了一个命令提示窗口的新实例。 我不想有两个.bat
文件只是为了最大化一个。
我知道最大化的Windows键是ALT + SPACE然后X。 我有这个想法,也许我可以在批处理脚本中使用某种SendKeys
来自动化? 我没有任何运气在网上find信息。
无论如何编程这个在相同的.bat
实例内最大化?
控制台窗口不是以像素为单位,而是以行和列来衡量。 部分地,物理尺寸将取决于用户定义的字体和大小。
最简单的解决方法是使用mode
命令增加行数和/或列数。 您还可以使用PowerShell帮助程序来增加滚动缓冲区。 如下是一个批处理函数,我用了几次来操纵所有这些值。
:consize <columns> <lines> <scrolllines> :: change console window dimensions and buffer mode con: cols=%1 lines=%2 powershell -noprofile "$W=(get-host).ui.rawui; $B=$W.buffersize; $B.height=%3; $W.buffersize=$B" goto :EOF
:consize
函数在脚本的底部, 在主脚本运行时的最后exit /b
或goto :EOF
之后。 有关批处理功能的更多示例, 请参阅此页面 。
用法示例:
call :consize 80 33 10000
…将窗口扩大到80列和33行,然后将垂直滚动缓冲区扩大到10,000行。
这里有一个更加完整的Batch + PowerShell混合脚本,它将把窗口移动到0,0,然后将其宽度和高度更改为屏幕将容纳的最大列数和行数。 我不得不尝试$max.Height
和$max.Width
值一点,所以我不确定不同的显示分辨率和不同的字体大小会影响脚本。 不过,它应该足够接近政府的工作。
<# : batch portion @echo off & setlocal call :maximize rem /* ############################### rem Your main batch code goes here. rem ############################### */ goto :EOF :maximize set "scrollLines=10000" powershell -noprofile "iex (${%~f0} | out-string)" goto :EOF rem // end batch / begin PowerShell hybrid code #> # Moving the window to coordinates 0,0 requires importing a function from user32.dll. add-type user32_dll @' [DllImport("user32.dll")] public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags); '@ -namespace System # Walk up the process tree until we find a window handle $id = $PID do { $id = (gwmi win32_process -filter "ProcessID='$id'").ParentProcessID $hwnd = (ps -id $id).MainWindowHandle } while (-not $hwnd) # This is where the window moves! [void][user32_dll]::SetWindowPos($hwnd, [IntPtr]::Zero, 0, 0, 0, 0, 0x41) # Maximize the window $console = (get-host).ui.rawui $max = $console.MaxPhysicalWindowSize $max.Height -= 1 # account for the titlebar $max.Width -= 5 # account for the scrollbar $buffer = $max $buffer.Height = $env:scrollLines $console.BufferSize = $buffer $console.WindowSize = $max
我正在考虑这个方法:
@echo off set mytitle=%random% title %mytitle% echo WScript.sleep 1000 > %temp%\max-me.vbs echo WScript.CreateObject("WScript.Shell").AppActivate "%mytitle%" >> %temp%\max-me.vbs echo WScript.CreateObject("WScript.Shell").SendKeys "%% n" >> %temp%\max-me.vbs cscript %temp%\max-me.vbs >nul echo further code goes here... pause
但是,由于某些原因,sendkeys似乎不能用于cmd窗口。 下面的机制起作用,但是你失去了现有的窗口及其退出状态。
@echo off if not defined iammaximized ( set iammaximized=1 start /max "" "%0" "%*" exit ) echo further code goes here... pause
有一个叫“cmdow.exe”的小工具(可以下载ad sourceforge.net)。 但要小心,这个工具允许你做很多你可能不想做的事情。
为了最大化currend cmd窗口:
cmdow @ /max
为了再次恢复当前的cmd窗口:
cmdow @ /res