주어진 창 크기로 콘솔 응용 프로그램을 어떻게 열 수 있습니까? 같은 배치

시작하려는 응용 프로그램은 MongoDB입니다. 정상적으로 시작하면 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

줄 바꿈이 마음에 들지 않고 화면 공간이 많으므로 줄 바꿈을 제거하기 위해 해당 공간을 활용하고 싶습니다.

로 콘솔 창의 크기를 변경할 수 MODE있으므로 다음과 같은 배치 파일을 작성했습니다.

@ECHO OFF
MODE con:cols=140 lines=70
%~dp0mongodb\bin\mongod --dbpath %~dp0data --rest

여태까지는 그런대로 잘됐다. 이 배치 파일을 시작하면 원하는대로 더 큰 창이 나타납니다.

그러나 이제 Ctrl+ C를 눌러 MongoDB를 종료하면 성가신 프롬프트가 나타납니다.

Terminate batch job (Y/N)?

어쨌든 내가 방금 종료 한 명령이 배치 작업의 마지막 명령 이었기 때문에 응답하지 않더라도 결과는 같습니다.

따라서 Ctrl+를 눌렀을 때 메시지가 표시되지 않고 어떻게 응용 프로그램을 위해 더 큰 콘솔 창을 얻을 수 C있습니까?



답변

오늘 몇 시간 동안 다른 콘솔 응용 프로그램을 래핑 하고 콘솔 호스트의 창 크기를 조정할 수있는 작은 C # 응용 프로그램을 구현했습니다 .

console-wrapper사용하기 쉽습니다. 몇 가지 명령 줄 매개 변수 만 필요합니다.

Usage: console-wrapper.exe [OPTIONS]

Options:

      --subject=VALUE        The application that should be started by the
                               console wrapper.
      --width=VALUE          The desired width of the console window.
      --height=VALUE         The desired height of the console window.
  -h, -?, --help             Shows this help message

--width그리고 --height그 결과 콘솔 윈도우의 크기를 설정하는 데 사용됩니다. --subject생략 가능하면 나머지 매개 변수는 시작하는 명령 (매개 변수 포함)으로 처리됩니다.

시작 스크립트에서 지금 사용중인 마지막 호출은 다음과 같습니다.

START "MongoDB" database\console-wrapper.exe --width=140 --height=70 %~dp0database\mongodb\bin\mongod.exe --dbpath %~dp0database\data --rest

결과 창은 요청 된 크기를 가지며 Ctrl+ C를 누르면 창이 닫힙니다 (포함 된 프로세스를 올바르게 종료 한 후).


답변

powershell 스크립트에서 실행 해 보셨습니까? Powershell은 자체 창 크기를 조정할 수 있습니다

$h = Get-Host
$buf = $h.UI.RawUI.BufferSize
$buf.Width = 300
$h.ui.rawui.BufferSize = $buf
$win = $h.UI.RawUI.WindowSize
$win.Width = 150
$h.ui.rawui.WindowSize = $win
#Command to start mongodb here.

크기가 150 인 창을 만들지 만 옆으로 스크롤 가능한 버퍼는 300입니다.


답변

내가 질문을 이해하는 한, MongoDB가 지정된 크기의 콘솔 창을 가지고 Ctrl+ 를 누르면 종료되기를 원합니다 C. 대답은 매우 간단 합니다. 바로 가기사용 하여 시작하십시오.

내가없는 mongod내가 사용하는 것, 그래서 실행 perl.exe예를 들어. 실행 대화 상자 ( Windows+ R) 에서 시작 하면 콘솔 창의 크기는 표준 80×25이며 버퍼 크기는 300 줄입니다.

  1. 바로 가기를 만듭니다 mongod(또는 perl필자의 경우).
  2. 바로 가기를 마우스 오른쪽 단추로 클릭하고 속성을 클릭하십시오 .
    1. 바로 가기 에서 탭 대상 필드, 매개 변수를합니다 추가 mongod.
    2. 시작 필드는 시작된 프로그램의 초기 현재 디렉토리를 제어합니다. 기본적으로 .exe가있는 디렉토리가됩니다.
  3. 레이아웃 탭을 클릭 하십시오.
    1. 창 크기 를 140 × 70으로 변경하십시오 .
    2. 당신은 높일 수 있습니다 높이화면 버퍼 크기를 이전의 메시지를 스크롤 할 수 있도록 1000 이상.
    3. 시스템 위치 창 허용 을 지우면 화면에서 콘솔 창의 위치를 ​​지정할 수 있습니다.
  4. 클릭 확인을 닫기 바로 가기 속성.

이제이 바로 가기를 클릭하면 콘솔 창의 크기가 지정됩니다. Ctrl+ 를 누르면 C응용 프로그램이 종료되고 추가 프롬프트없이 창이 닫힙니다.


실행 대화 상자 에서 창을 시작한 후 창의 레이아웃을 변경할 수도 있습니다 . 콘솔 창의 제목을 마우스 오른쪽 단추로 클릭하고 특성을 클릭하십시오 . 레이아웃 탭을 클릭 하고 창 크기를 조정 한 다음 확인 을 클릭 하여 속성을 닫고 변경 사항을 즉시 적용하십시오. (바로 가기에서 창을 시작한 경우 바로 가기 속성이 업데이트됩니다.)

다음에 같은 응용 프로그램을 시작할 때 콘솔 창의 크기는 마술과 같은 크기입니다. (이번에는 확인하지 않았지만 작동했습니다.)


답변

기본 콘솔 레이아웃 설정은 여기 레지스트리에 있습니다.

[HKEY_CURRENT_USER\Console]

이 설정을 수정할 수 있으며 경로에 관계없이 실행되는 모든 명령 창에 적용됩니다. 불행하게도, 미가공 가치는 인간 친화적이지 않습니다.

원하는 방식으로 설정하려면 일반 cmd 창을 연 다음 원하는대로 설정을 편집하십시오. 위 경로의 레지스트리를 보면 cmd.exe의 “Console”아래에 하위 키가 표시됩니다. 해당 키를 파일로 내보내거나 경로를 위의 경로로 변경하여 가져 오거나 값을 수동으로 복사하십시오. 그런 다음 cmd.exe 특정 항목을 삭제할 수 있습니다. 이제 열려있는 모든 명령 창에 수정 된 기본값이 사용됩니다.

RDP를 처음 시작할 때 새 서버에 쉽게 팝업 할 수 있도록 표준 기본값으로 두 개의 레지스트리 항목 파일을 만드는 것이 편리하다는 것을 알았습니다. 일반적으로 사용하는 두 가지 크기에 대한 사전 설정을 만들었습니다.

1024 x 768의 경우 (멀티 세션 RDP 도구를 통해 일반적으로 액세스하는 서버에 사용) :

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Console]
"ScreenBufferSize"=dword:012c0050
"WindowSize"=dword:00190050
"WindowPosition"=dword:000a000a
"FontSize"=dword:000c0007
"FontFamily"=dword:00000030
"FontWeight"=dword:00000190
"FaceName"="Terminal"
"QuickEdit"=dword:00000001

1280 x 1024의 경우 :

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Console]
"ScreenBufferSize"=dword:0bb800af
"WindowSize"=dword:004b00af
"WindowPosition"=dword:000a000a
"FontSize"=dword:000c0007
"FontFamily"=dword:00000030
"FontWeight"=dword:00000190
"FaceName"="Terminal"
"QuickEdit"=dword:00000001

답변

Startmongodb 호출 앞에 명령을 넣으십시오 . 나는 그것이 고쳐야한다고 믿는다.


답변

몇 가지 작은 도우미 프로그램과 함께 배치 파일을 실행하는 것이 행복하다면 여기에 완전한 솔루션이 게시되어
있습니다. 배치 파일을 사용하여 프로그램을 실행하고 창의 위치와 크기를 어떻게 설정할 수 있습니까?

아래와 같이 내용물. . . .

이 데모 배치 파일은 명령 줄 프로그램을 실행하고 명령 프롬프트 콘솔 창의 위치와 크기를 설정합니다. 이 배치의 일반적인 주제는 이전 두 솔루션 (위 링크의 스택 오버플로 페이지)과 동일하지만이 문제를 해결하기위한 몇 가지 고유 한 문제와 해결 방법이있었습니다. .EXE ‘및’EXPLORER.EXE ‘와 같은 GUI 창은 아닙니다.

자세한 정보는 배치 파일의 모든 주석 및 설명을 읽으십시오.

사용되는 도구 :
1.   MonitorInfoView  Nir 씨 소퍼하여 (41킬로바이트)
2.   NirCmd  Nir 씨 소퍼하여 (43킬로바이트)
3.   GetPIDs  다니엘 Scheibli하여 (2백80킬로바이트)
4.   upx.exe  — 우리는이 데모에 사용하는 명령 행 프로그램이다; 배치 파일과 동일한 디렉토리에 배치하십시오.
5. 배치 파일 — 아래

5 개 파일을 모두 디렉토리에 모으십시오. 이것은 모든 Windows 시스템에서 실행할 수있는 배치 파일입니다.

이 데모 배치는 사용자 정의 콘솔 창을 제공하는 것과는 별도로 upx.exe명령 행 스위치로 실행 됩니다.--best -v -o getpids-compressed.exe getpids.exe. 도구 ‘GetPIDs’를 88KB로 압축합니다. …….. 시작한 후이 콘솔 창의 제목 표시 줄을 두 번 클릭하면 흥미로운 현상이 나타납니다. 이 콘솔 창은 GUI처럼 동작합니다!

@echo off
setlocal enabledelayedexpansion enableextensions
pushd %~dp0%

REM ----- ADD SOME USEFUL INFORMATION TO THIS CONSOLE WINDOW TITLE.
for /f "tokens=3" %%A in ('getpids.exe') do set _PROCESS_ID_=%%A
title This batch file runs a command-line program and sets the position and size of its console window        (PROCESS ID = %_PROCESS_ID_%)

REM ********************** DESCRIPTION ************************************
REM ** This script opens a command-line program console window with specified
REM ** screen properties at the primary monitor (containing the taskbar).
REM ** The "X/Y position" and "W/H size" of the console window is auto-set by
REM ** this script and the monitor resolution is auto-calculated to suit.
REM ** 'MonitorInfoView.exe' is the helper tool used to capture the resolution
REM ** info of the monitor.
REM ** 'nircmd.exe' is the tool performing all the display trickery.
REM ** 'getpids.exe' is the helper tool used to capture the Process ID of the
REM ** working batch file, thus allowing us to identify which CMD.EXE host this
REM ** console window belongs to when looking at Task Manager.
REM **
REM ** To tweak this script, go to the code section named:
REM ** >>>>> USER INPUT/PREFERENCES ARE ALL SET HERE <<<<<
REM ***********************************************************************

REM ----- CLEAR ANY PREVIOUS JOB OUTPUTS IF THEY EXIST
if exist ~TMP.TXT type NUL > ~TMP.TXT

REM ----- OUTPUT THE PRIMARY MONITOR INFORMATION TO A TEXT FILE
MonitorInfoView.exe /hideinactivemonitors 1 /stext ~TMP.TXT

REM ----- ISOLATE THE RESOLUTION LINE, REMOVING ALL THE OTHER LINES IN THE TEXT FILE
for /f "delims=" %%A in ('type "~TMP.TXT" ^|find.exe /i "Maximum Resolution"') do echo %%A>~TMP.TXT

REM ----- GET THE RESOLUTION NUMBERS, AND SET THEM AS VARIABLES
for /f "tokens=3,4 delims=:X " %%A in ('type "~TMP.TXT"') do set _SCREENW_=%%A& set _SCREENH_=%%B


REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [BEGIN] <<<<<<<<<<<<

REM ----- ----------------------------------------
REM ----- |COMMAND-LINE PROGRAM TO BE RUN:  FILE NAME (WITH EXTENSION)
REM ----- |
REM ----- | |IF PROG TO BE RUN IS 'CMD.EXE' (WINDOWS COMMAND PROCESSOR)
REM ----- | |ALSO READ THE NEXT COMMENTS ABOUT SETTING SWITCHES

    set _MYPROGRAM_=upx.exe

REM ----- ----------------------------------------
REM ----- |COMMAND-LINE PROGRAM TO BE RUN:  SWITCHES (TO BE PASSED TO THE PROGRAM)
REM ----- |
REM ----- | |YOU CAN LEAVE THIS VARIABLE WITH A BLANK VALUE IF RUNNING THE PROG WITHOUT ANY PARAMETERS
REM ----- | |
REM ----- | | |IF THE VALUE CONTAINS THE CHARS  '|'  OR  '<'  OR  '>'  THIS BATCH WILL FAIL TO RUN !!!
REM ----- | | |
REM ----- | | | |YOU CAN APPEND EXTRA TEXT TO THE END OF THE COMMAND BY USING THE AMPERSAND CHARACTER '&'
REM ----- | | | | EXAMPLES:
REM ----- | | | | set _MYPROGRAMSWITCHES_=dir "%systemroot%\system32" /a/o/s/4 & this text will be ignored; useful for adding some inline comments.
REM ----- | | | | set _MYPROGRAMSWITCHES_=dir "%systemroot%\system32" /a/o/s/4         & this works too, and the extra blank spaces will also be ignored.
REM ----- | | | |
REM ----- | | | | |IF PROG TO BE RUN IS 'CMD.EXE' (WINDOWS COMMAND PROCESSOR), PATH ARGUMENTS MUST POINT TO A SPECIFIC LOCATION
REM ----- | | | | |AND BE ABSOLUTE OR INCLUDE ENVIRONMENT VARIABLES, AND ALWAYS ENCLOSE PATHS IN QUOTES.
REM ----- | | | | | EXAMPLES:
REM ----- | | | | | set _MYPROGRAMSWITCHES_=type "C:\Folder With Spaces\File.txt"
REM ----- | | | | | set _MYPROGRAMSWITCHES_=type "C:\FolderWithoutSpaces\File.txt"
REM ----- | | | | | set _MYPROGRAMSWITCHES_=type "%SYSTEMROOT%\..\Folder With Spaces\File.txt"
REM ----- | | | | | set _MYPROGRAMSWITCHES_=type "%SYSTEMROOT%\..\FolderWithoutSpaces\File.txt"
REM ----- | | | | | set _MYPROGRAMSWITCHES_=type %0                                       <<<<<<<this batch file (quotes are optional; the only exception to the rule)
REM ----- | | | | | set _MYPROGRAMSWITCHES_=type "%~dp0%\..\File.txt"                     <<<<<<<goes back one Dir from this batch file
REM ----- | | | | | set _MYPROGRAMSWITCHES_=type "%~dp0%\..\SomeFolder\File.txt"          <<<<<<<goes back one Dir from this batch file and then forwards into "SomeFolder"
REM ----- | | | | | set _MYPROGRAMSWITCHES_=dir "%systemroot%\system32" /a/o/s/4          <<<<<<<displays directory listing of the System folder. NOTE: 'dir' by itself and
REM ----- | | | | |                                                                                without a specific path argument will resolve to the folder of this batch file.

    set _MYPROGRAMSWITCHES_=--best -v -o getpids-compressed.exe getpids.exe      &// original is 280 KB, will compress down to 88 KB

REM ----- ----------------------------------------
REM ----- |COMMAND-LINE PROGRAM TO BE RUN:  DIRECTORY PATH (OF THE PROGRAM)
REM ----- |
REM ----- | |YOU CAN LEAVE THIS VARIABLE WITH A BLANK VALUE IF THE PROG IS AT SAME LOCATION AS BATCH
REM ----- | |THIS VARIABLE WILL BE IGNORED IF THE PROG IS 'CMD.EXE'
REM ----- | |
REM ----- | | EXAMPLES:
REM ----- | | set _MYPROGRAMDIR_=.\                               <<<<<<<relative path, program and batch in same directory
REM ----- | |                                                                  dot backslash *OR* dot (trailing backslash is optional).
REM ----- | | set _MYPROGRAMDIR_=%dp0%                            <<<<<<<relative path, program and batch in same directory
REM ----- | |                                                                  same locatiion as previous but using environment variable.
REM ----- | | set _MYPROGRAMDIR_=..\                              <<<<<<<relative path, program is back one directory from batch
REM ----- | |                                                                  dot dot backslash *OR* dot dot (trailing backslash is optional).
REM ----- | | set _MYPROGRAMDIR_=%dp0%\..                         <<<<<<<relative path, program is back one directory from batch
REM ----- | |                                                                  same as location as previous but using environment variable.
REM ----- | | set _MYPROGRAMDIR_=%SYSTEMROOT%\..\My Utilities     <<<<<<<relative path, program is back one directory from the Windows folder
REM ----- | |                                                                  and then forwards into the folder 'My Utilities'
REM ----- | | set _MYPROGRAMDIR_=C:\My Utilities\                 <<<<<<<absolute path, enclosing quotes are optional; trailing backslash is optional
REM ----- | |                                                                  same location as previous

    set _MYPROGRAMDIR_=

REM ----- ----------------------------------------
REM ----- |SET THE WANTED DIMENSIONS OF THIS CONSOLE WINDOW

    set /a _WINW_=(%_SCREENW_% / 2) + 250
    set /a _WINH_=(%_SCREENH_% / 2) + 150
    set /a _WINX_=(%_SCREENW_% - %_WINW_%) / 2
    set /a _WINY_=(%_SCREENH_% - %_WINH_%) / 2

REM ----- ----------------------------------------
REM ----- |STYLE THIS CONSOLE WINDOW   !!!IMPORTANT!!!
REM ----- |
REM ----- | |IF WE DO NOT USE THE 'MODE' COMMAND HERE ALONG WITH ITS 'COLS/LINES' VALUES THEN
REM ----- | |THE POSITIONING/SIZING OF THIS WINDOW BY 'NIRCMD.EXE' FURTHER DOWN WILL NOT WORK !!!
REM ----- | |
REM ----- | | |SOME COMMANDS WILL OUTPUT A LOT OF LINES AND AND THE CONSOLE DISPLAY WILL BE TRUNCATED
REM ----- | | |RUN THIS FOR AN EXAMPLE=====>   cmd.exe dir "%systemroot%\system32" /a/o/s/4   <=====
REM ----- | | |TO SOLVE THIS PROBLEM, SET THE 'LINES' VALUE OF 'MODE' TO A VERY HIGH NUMBER
REM ----- | | |THE MAXIMUM NUMBER IS 32000 (ON MY SYSTEM); 'MODE' WILL BE IGNORED IF THE NUMBER IS HIGHER !!!

    color 0A
    mode.com con:cols=%_SCREENW_% lines=10000

REM ----- ----------------------------------------
REM ----- |DELETE THE TEMP TEXT FILE MADE BY 'MonitorInfoView.exe'
REM ----- |COMMENT OUT THE LINE IF YOU DON'T CARE ABOUT DELETING IT

    del /f /q ~TMP.TXT 2>nul >nul

REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [END] <<<<<<<<<<<<<<
REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


REM ----- RUN THE TASK . . .
nircmd.exe win setsize foreground %_WINX_% %_WINY_% %_WINW_% %_WINH_%
popd

if not defined _MYPROGRAMDIR_ set _MYPROGRAMDIR_=%~dp0
if "!_MYPROGRAMDIR_!" == "." set _MYPROGRAMDIR_=%~dp0
if "!_MYPROGRAMDIR_!" == ".\" set _MYPROGRAMDIR_=%~dp0
pushd %_MYPROGRAMDIR_%
if not exist %_MYPROGRAMDIR_% goto _SKIP_
set _CONVERT_PATH_="%CD%"
set _CONVERT_PATH_=%_CONVERT_PATH_:"=%
set _MYPROGRAMDIR_=%_CONVERT_PATH_%
:_SKIP_
popd

echo ===============================================================================
echo PROGRAM ..............: !_MYPROGRAM_!
if "!_MYPROGRAM_!"=="cmd.exe" (echo PROGRAM DIR ..........: %SYSTEMROOT%\system32) else (echo PROGRAM DIR ..........: !_MYPROGRAMDIR_!)
echo PROGRAM SWITCHES .....: !_MYPROGRAMSWITCHES_!
echo ===============================================================================

if "!_MYPROGRAM_!"=="cmd.exe" (goto _PROGRAM_IS_CMD_) else (goto _PROGRAM_IS_OTHER_)

:_PROGRAM_IS_CMD_
cd /d "%SYSTEMROOT%\system32"
!_MYPROGRAMSWITCHES_!
echo. & echo. & echo.
goto _END_

:_PROGRAM_IS_OTHER_
cd /d "!_MYPROGRAMDIR_!"
if "%CD%\!_MYPROGRAM_!" == "%CD%\" goto _ERRORMESSAGE_
if not exist "%CD%\!_MYPROGRAM_!" goto _ERRORMESSAGE_
"!_MYPROGRAMDIR_!\!_MYPROGRAM_!" !_MYPROGRAMSWITCHES_!
echo. & echo. & echo.
goto _END_

:_ERRORMESSAGE_
cls
color 4F
echo ===============================================================================
echo PROGRAM ..............: !_MYPROGRAM_!
echo PROGRAM DIR ..........: !_MYPROGRAMDIR_!
echo PROGRAM SWITCHES .....: !_MYPROGRAMSWITCHES_!
echo ===============================================================================
echo                        ^^!^^!^^!  E R R O R  ^^!^^!^^!
echo.
echo The program has failed to run; the path set by the above values does not exist.
echo Please exit this window and check the values you have set in this batch file.
echo.
echo This batch file is located here:
echo %0
echo. & echo. & echo. & echo. & echo.

:_END_

REM ----- CLEAR VARIABLE VALUES FROM MEMORY . . .
set _PROCESS_ID_=
set _SCREENW_=
set _SCREENH_=
set _MYPROGRAM_=
set _MYPROGRAMSWITCHES_=
set _MYPROGRAMDIR_=
set _WINW_=
set _WINH_=
set _WINX_=
set _WINY_=
set _CONVERT_PATH_=

REM ----- STOP THIS CONSOLE WINDOW FROM CLOSING   !!!IMPORTANT!!! . . .
REM ----- |
REM ----- | http://superuser.com/questions/306167/how-to-prevent-the-command-prompt-from-closing-after-execution
REM ----- | | by 'kitsu.eb' (April 26, 2014)
REM ----- | | | "My solution (just tested on Win7) is to add CMD as the last line in the batch file.
REM ----- | | |  This runs a nested command prompt that inherits the environment of its parent.
REM ----- | | |  That child shell holds the batch process open until you EXIT, at which point the
REM ----- | | |  batch has no child processes and also exits."
REM ----- | Comment . . .
REM ----- | | by me
REM ----- | | | "This is a workaround. You can't use PAUSE as the last command to stop this window from closing
REM ----- | | |  because the window will terminate after you press a key. While this batch is running, if you open
REM ----- | | |  Task Manager/Process Hacker/Process Explorer you will see an extra CMD.EXE child process running
REM ----- | | |  under the parent CMD.EXE of this batch file."
cmd.exe