vol ver uso significa que hacer ejemplo como comandos comando batch bat avanzados autoejecutable archivo batch-file cmd windows-explorer

batch-file - uso - ver comandos



¿Cómo puede un archivo por lotes ejecutar un programa y establecer la posición y el tamaño de la ventana? (5)

Tengo un archivo por lotes que configura el entorno de escritorio para mí cuando estoy escribiendo código. El archivo se llama: SetEnv.cmd y abre otras 3 ventanas:

  1. Una instancia de Windows Explorer que está configurada en el directorio de implementación del servidor de la aplicación.
  2. Una segunda instancia de Windows Explorer que está configurada en el directorio donde está escrito mi archivo de implementación.
  3. Una ventana de consola para iniciar mi servidor de aplicaciones.

Aquí están los contenidos de SetEnv.cmd :

Explorer /n,c:/develop/jboss-4.2.3.GA/server/default/deploy Explorer /n,c:/develop/Project/Mapping/deploy cmd /c SetupEnvCmd.cmd

Y aquí están los contenidos de SetupEnvCmd.cmd :

cd C:/develop/jboss-4.2.3.GA/bin run

Cada vez que ejecuto esto, tengo que perder tiempo reorganizando y cambiando el tamaño de las ventanas. No quiero ejecutar las ventanas minimizadas, porque interactúo con cada ventana muchas veces mientras escribo y pruebo el código. ¿Hay alguna manera de controlar la posición y / o el tamaño de las ventanas que se abren desde el script?


Aquí hay una forma alternativa con nircmd util de http://www.nirsoft.net/utils/nircmd.html
Ejemplos:

nircmd win move ititle "cmd.exe" 5 5 10 10
nircmd win setsize ititle "cmd.exe" 30 30 100 200
nircmd cmdwait 1000 win setsize ititle "cmd.exe" 30 30 1000 600

Aquí están los contenidos de SetEnv.cmd:

Explorer /n,c:/develop/jboss-4.2.3.GA/server/default/deploy nircmd wait 1000 win setsize ititle "something" x, y, width, height Explorer /n,c:/develop/Project/Mapping/deploy nircmd wait 1000 win setsize ititle "something" x, y, width, height

Donde x, y esquina superior izquierda ubicación y ancho, altura son el tamaño de la ventana "algo" es el título de la ventana, por lo general, el nombre de la carpeta, por ejemplo. "c: / develop / jboss-4.2.3.GA / server / default / deploy" Es posible que sea necesario ajustar la "espera" para dar tiempo a que se inicie la ventana de la aplicación. De modo que aumentaría el tiempo si tiene escáneres de virus que se retrasen. No es tanto un problema con explorer.exe o cmd.exe, pero algo así como las aplicaciones de Firefox o Java pueden variar de unos pocos segundos a varias docenas de segundos, dependiendo de la velocidad de su hardware y la afinación del sistema operativo. También puede personalizar la ventana cmd.exe o la aplicación "ejecutar" agregando líneas a "SetupEnvCmd.cmd suponiendo que" ejecutar "es una aplicación win32 asíncrona; de lo contrario, agregue el comando" start ".


Como alternativa, sugeriría usar AutoHotKey , que manejaría esto fácilmente (mejor que Powershell y Batch, en mi opinión).

Como una muestra simple, para iniciar las dos instancias de Explorer, redimensionarlas (y moverlas) y luego hacer lo mismo con la ventana de cmd, puede hacer algo como esto:

Run Explorer /n,c:/develop/jboss-4.2.3.GA/server/default/deploy Run Explorer /n,c:/develop/Project/Mapping/deploy WinMove, deploy, server/default, 0, 0, 200, 200 WinMove, deploy, Project/Mapping, 200, 0, 200, 200 Run cmd /c SetupEnvCmd.cmd WinMove, C:/develop/jboss-4.2.3.GA/bin, 0, 200

Ayuda de WinMove Doc


Este problema está completamente resuelto usando un par de programas auxiliares y un archivo por lotes.
Tengo dos soluciones; uno para computadora de monitor único y otro para computadora de monitores múltiples.

SOLUCIÓN 1: PARA ORDENADOR DE MONITOR INDIVIDUAL

Este archivo de demo por lotes abrirá dos ventanas de Explorer una al lado de la otra y se centrará en la pantalla en el monitor principal.
Lea la descripción en el archivo por lotes.

Herramientas utilizadas:
1. MonitorInfoView por Nir Sofer (41 KB) ... homepage
2. NirCmd por Nir Sofer (43 KB) ............................ http://www.nirsoft.net/utils/nircmd.html
3. Un archivo por lotes (6 KB) ......................................... ...vea abajo

Reúna los tres archivos en un directorio.
Este es el archivo por lotes, listo para ejecutarse en cualquier sistema Windows (ejecútelo para una demostración instantánea) :

@echo off REM ----- GIVE THIS CONSOLE WINDOW TITLE A UNIQUE STRING ID title OPEN-2-EXPLORER-WINDOWS-SIDE-BY-SIDE-AND-CENTERED-ON-SCREEN-AT-THE-PRIMARY-MONITOR___20131209084355 pushd %~dp0 REM ----- HIDE THIS CONSOLE WINDOW (HOOKS THE WINDOW TITLE) nircmd.exe win hide ititle "OPEN-2-EXPLORER-WINDOWS-SIDE-BY-SIDE-AND-CENTERED-ON-SCREEN-AT-THE-PRIMARY-MONITOR___20131209084355" REM ********************** DESCRIPTION ************************************ REM ** This script opens one or more windows with specified screen properties REM ** at the primary monitor (containing the taskbar). The "X/Y position" and REM ** "W/H size" of the windows are auto-set by this script and the monitor REM ** 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 ** 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 ----- LEFT WINDOW PROPERTIES set _WINLEFT_=%SYSTEMDRIVE% set /a _WINLEFTW_=(%_SCREENW_% / 3) + 50 set /a _WINLEFTH_=(%_SCREENH_% / 2) + 200 set /a _WINLEFTX_=(%_SCREENW_% - %_WINLEFTW_%) / 5 set /a _WINLEFTY_=(%_SCREENH_% - %_WINLEFTH_%) / 2 REM ----- RIGHT WINDOW PROPERTIES set _WINRIGHT_=%USERPROFILE% set /a _WINRIGHTW_=(%_SCREENW_% / 3) + 50 set /a _WINRIGHTH_=(%_SCREENH_% / 2) + 200 set /a _WINRIGHTX_=(%_WINLEFTX_%) + (%_WINLEFTW_%) set /a _WINRIGHTY_=(%_SCREENH_% - %_WINRIGHTH_%) / 2 REM ----- ADJUST THE WAIT TIME (MILLISECONDS) BETWEEN EACH WINDOW LAUNCH. REM ----- IF TOO QUICK, THE FOLLOWING WINDOW WILL NOT SET IN THE CORRECT SCREEN POSITION. REM ----- | FOR FAST SYSTEM: TRY 200 | NORMAL SYSTEM: TRY 400-600 | BLOATED SYSTEM: TRY 800-1200+ set _WAITTIME_=400 REM ----- ON WINDOWS NT5 (XP, 2000), RUNNING EXPLORER WITH THE ''N'' SWITCH WOULD RELIABLY GIVE REM ----- YOU 1-PANE VIEW (HIDDEN LEFT NAV PANE). ALSO, SHOWING/HIDING OF THE LEFT NAV PANE WAS REM ----- INSTANTLY TOGGLED BY AN ICON ON THE EXPLORER GUI TOOLBAR. REM ----- ON WINDOWS NT6 (VISTA, 7), EXPLORER WILL NOT OBEY YOUR COMMANDS AT ALL TIMES AND IT REM ----- IS A "PITA" TO CONTROL THE GRAPHIC USER INTERFACE. REM ----- THIS INPUT SECTION IS A WORKAROUND TO FORCE AN INSTANCE OF NT6 EXPLORER TO BE REM ----- TOGGLED TO A SPECIFIED VIEW. REM ----- | REM ----- | INSERT ONE OF THESE VALUES INTO THE VARIABLE _EXPLORER_VIEW_MYPREF_ REM ----- | | FOR EXPLORER 2-PANE VIEW (SHOW LEFT NAVPANE): 150100000100000000000000E5010000 REM ----- | | FOR EXPLORER 1-PANE VIEW (HIDE LEFT NAVPANE): 1501000000000000000000007B020000 set _EXPLORER_VIEW_MYPREF_=1501000000000000000000007B020000 REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [END] <<<<<<<<<<<<<< REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REM ----- RUN THE TASK . . . REM ----- REGKEY ''HKCU/Software/Microsoft/Windows/CurrentVersion/Explorer/Modules'' DOES NOT EXIST IN NT5 OR EARLIER REM ----- BUT TO ELIMINATE DOUBT WE WILL PERFORM A CONDITIONAL VERSION CHECK for /f "tokens=2 delims=[]" %%A in (''ver'') do set _THIS_OS_VERSTRING_=%%A set _THIS_OS_VERSTRING_=%_THIS_OS_VERSTRING_:Version =% for /f "tokens=1,2,3* delims=." %%A in ("%_THIS_OS_VERSTRING_%") do set _THIS_OS_MAJORVERSION_=%%A if %_THIS_OS_MAJORVERSION_% leq 5 goto SKIP1 set _EXPLORER_VIEW_REGKEY_=HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/Modules/GlobalSettings/Sizer set _EXPLORER_VIEW_REGVAL_=PageSpaceControlSizer if exist ~TMP.TXT type NUL > ~TMP.TXT reg.exe query %_EXPLORER_VIEW_REGKEY_% > ~TMP.TXT if %ERRORLEVEL% equ 1 goto SKIP1 for /f "delims=" %%A in (''type "~TMP.TXT" ^|find.exe /i "%_EXPLORER_VIEW_REGVAL_%"'') do echo %%A>~TMP.TXT for /f "tokens=1-3 delims= " %%A in (''type "~TMP.TXT"'') do set _EXPLORER_VIEW_SYSTEMPREF_=%%C reg.exe add %_EXPLORER_VIEW_REGKEY_% /v %_EXPLORER_VIEW_REGVAL_% /t REG_BINARY /d %_EXPLORER_VIEW_MYPREF_% /f 2>nul >nul nircmd.exe wait %_WAITTIME_% :SKIP1 nircmd.exe exec show "explorer.exe" /n,%_WINLEFT_% nircmd.exe wait %_WAITTIME_% nircmd.exe win setsize foreground %_WINLEFTX_% %_WINLEFTY_% %_WINLEFTW_% %_WINLEFTH_% nircmd.exe wait %_WAITTIME_% nircmd.exe exec show "explorer.exe" /n,%_WINRIGHT_% nircmd.exe wait %_WAITTIME_% nircmd.exe win setsize foreground %_WINRIGHTX_% %_WINRIGHTY_% %_WINRIGHTW_% %_WINRIGHTH_% REM ----- RESET SYSTEM PREF, CLEAR MEMORY, CLEANUP, QUIT . . . find.exe /i /c "%_EXPLORER_VIEW_REGVAL_%" ~TMP.TXT if %ERRORLEVEL% equ 1 goto SKIP2 nircmd.exe wait %_WAITTIME_% nircmd.exe wait %_WAITTIME_% reg.exe add %_EXPLORER_VIEW_REGKEY_% /v %_EXPLORER_VIEW_REGVAL_% /t REG_BINARY /d %_EXPLORER_VIEW_SYSTEMPREF_% /f 2>nul >nul :SKIP2 set _SCREENW_= set _SCREENH_= set _WINLEFTX_= set _WINLEFTY_= set _WINLEFTW_= set _WINLEFTH_= set _WINRIGHTX_= set _WINRIGHTY_= set _WINRIGHTW_= set _WINRIGHTH_= set _WAITTIME_= set _THIS_OS_VERSTRING_= set _THIS_OS_MAJORVERSION_= set _EXPLORER_VIEW_REGKEY_= set _EXPLORER_VIEW_REGVAL_= set _EXPLORER_VIEW_MYPREF_= set _EXPLORER_VIEW_SYSTEMPREF_= del /f /q ~TMP.TXT popd exit



SOLUCIÓN 2: PARA ORDENADOR MULTI-MONITOR

Este archivo de demo por lotes abrirá dos ventanas de Explorer una al lado de la otra y se centrará en la pantalla en el otro monitor (no primario) de un escritorio de dos monitores. Lea la descripción en el archivo por lotes.

Nota: Para esta demostración, asumo que el monitor izquierdo es Monitor-1 (el monitor activo principal, que contiene la barra de tareas) y el monitor derecho es Monitor-2 (el monitor activo no primario). Si su configuración es diferente, entonces modifique la secuencia de comandos.

Herramientas utilizadas:
1. MonitorInfoView por Nir Sofer (41 KB) .............. homepage
2. MultiMonitorTool por Nir Sofer (102 KB) ... homepage
3. NirCmd por Nir Sofer (43 KB) ............................... http://www.nirsoft.net/utils/nircmd.html
4. Un archivo por lotes (6 KB) ......................................... ......vea abajo

Reúna los cuatro archivos en un directorio.
Este es el archivo por lotes, listo para ejecutarse en cualquier sistema Windows ( ejecútelo para una demostración instantánea ):

@echo off REM ----- GIVE THIS CONSOLE WINDOW TITLE A UNIQUE STRING ID title OPEN-2-EXPLORER-WINDOWS-SIDE-BY-SIDE-AND-CENTERED-ON-SCREEN-AT-MONITOR-2-OF-A-MULTI-MONITOR-DESKTOP___20140101024519 pushd %~dp0 REM ----- HIDE THIS CONSOLE WINDOW (HOOKS THE WINDOW TITLE) nircmd.exe win hide ititle "OPEN-2-EXPLORER-WINDOWS-SIDE-BY-SIDE-AND-CENTERED-ON-SCREEN-AT-MONITOR-2-OF-A-MULTI-MONITOR-DESKTOP___20140101024519" REM ********************** DESCRIPTION ************************************ REM ** This script opens one or more windows with specified screen properties REM ** at a chosen monitor of a multi-monitor desktop. The "X/Y position" and REM ** "W/H size" of the windows are auto-set by this script and the monitor REM ** resolutions are auto-calculated to suit. REM ** ''MonitorInfoView.exe'' is the helper tool used to isolate the resolution REM ** info of the primary monitor (containing the taskbar). REM ** ''MultiMonitorTool.exe'' is the helper tool used to capture the REM ** resolution info of all monitors and for isolating the resolution info REM ** of the other (non-primary) monitor. REM ** ''nircmd.exe'' is the tool performing all the display trickery. 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 if exist ~TMP2.TXT type NUL > ~TMP2.TXT REM ----- OUTPUT THE PRIMARY MONITOR (MONITOR-1) INFORMATION TO A TEXT FILE MonitorInfoView.exe /hideinactivemonitors 1 /stext ~TMP.TXT REM ----- ISOLATE THE RESOLUTION LINE OF MONITOR-1, 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 OF MONITOR-1, AND SET THEM AS VARIABLES for /f "tokens=3,4 delims=:X " %%A in (''type "~TMP.TXT"'') do ( set _M1_SCREENW_=%%A set _M1_SCREENH_=%%B ) REM ----- OUTPUT INFO OF ALL MONITORS TO TEXT FILE MultiMonitorTool.exe /stext ~TMP.TXT REM ----- TRY REMOVING MONITOR-1 RESOLUTION LINE (KEEPING MONITOR-2 RESOLUTION LINE) find.exe /i /v "%_M1_SCREENW_% X %_M1_SCREENH_%" < ~TMP.TXT > ~TMP2.TXT REM ----- TRY ISOLATING MONITOR-2 RESOLUTION LINE (REMOVING ALL THE OTHER LINES IN THE TEXT FILE) for /f "delims=" %%A in (''type "~TMP2.TXT" ^|find.exe /i "Maximum Resolution"'') do echo %%A>~TMP2.TXT REM ----- CONDITIONALLY GET THE RESOLUTION NUMBERS OF MONITOR-2, AND SET THEM AS VARIABLES ... REM ----- CASE(A): IF MONITORS HAVE SAME RESOLUTION, ASSUME NO LINES HAVE STRING "Maximum Resolution". REM ----- CASE(B): IF MONITORS HAVE DIFFERENT RESOLUTION, ASSUME ONE LINE HAS STRING "Maximum Resolution". find.exe /i /c "Maximum Resolution" ~TMP2.TXT if %ERRORLEVEL% equ 1 ( set _M2_SCREENW_=%_M1_SCREENW_%&set _M2_SCREENH_=%_M1_SCREENH_% ) else ( for /f "tokens=3,4 delims=:X " %%A in (''type "~TMP2.TXT"'') do set _M2_SCREENW_=%%A&set _M2_SCREENH_=%%B ) REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [BEGIN] <<<<<<<<<<<< REM ----- MONITOR-2 LEFT WINDOW PROPERTIES set _M2_WINLEFT_=%SYSTEMDRIVE% set /a _M2_WINLEFTW_=(%_M2_SCREENW_% / 3) + 50 set /a _M2_WINLEFTH_=(%_M2_SCREENH_% / 2) + 200 set /a _M2_WINLEFTX_=(%_M1_SCREENW_%) + (%_M2_SCREENW_% - %_M2_WINLEFTW_%) / 5 set /a _M2_WINLEFTY_=(%_M2_SCREENH_% - %_M2_WINLEFTH_%) / 2 REM ----- MONITOR-2 RIGHT WINDOW PROPERTIES set _M2_WINRIGHT_=%USERPROFILE% set /a _M2_WINRIGHTW_=(%_M2_SCREENW_% / 3) + 50 set /a _M2_WINRIGHTH_=(%_M2_SCREENH_% / 2) + 200 set /a _M2_WINRIGHTX_=(%_M2_WINLEFTX_%) + (%_M2_WINLEFTW_%) set /a _M2_WINRIGHTY_=(%_M2_SCREENH_% - %_M2_WINRIGHTH_%) / 2 REM ----- ADJUST THE WAIT TIME (MILLISECONDS) BETWEEN EACH WINDOW LAUNCH. REM ----- IF TOO QUICK, THE FOLLOWING WINDOW WILL NOT SET IN THE CORRECT SCREEN POSITION. REM ----- | FOR FAST SYSTEM: TRY 200 | NORMAL SYSTEM: TRY 400-600 | BLOATED SYSTEM: TRY 800-1200+ set _WAITTIME_=400 REM ----- ON WINDOWS NT5 (XP, 2000), RUNNING EXPLORER WITH THE ''N'' SWITCH WOULD RELIABLY GIVE REM ----- YOU 1-PANE VIEW (HIDDEN LEFT NAV PANE). ALSO, SHOWING/HIDING OF THE LEFT NAV PANE WAS REM ----- INSTANTLY TOGGLED BY AN ICON ON THE EXPLORER GUI TOOLBAR. REM ----- ON WINDOWS NT6 (VISTA, 7), EXPLORER WILL NOT OBEY YOUR COMMANDS AT ALL TIMES AND IT REM ----- IS A "PITA" TO CONTROL THE GRAPHIC USER INTERFACE. REM ----- THIS INPUT SECTION IS A WORKAROUND TO FORCE AN INSTANCE OF NT6 EXPLORER TO BE REM ----- TOGGLED TO A SPECIFIED VIEW. REM ----- | REM ----- | INSERT ONE OF THESE VALUES INTO THE VARIABLE _EXPLORER_VIEW_MYPREF_ REM ----- | | FOR EXPLORER 2-PANE VIEW (SHOW LEFT NAVPANE): 150100000100000000000000E5010000 REM ----- | | FOR EXPLORER 1-PANE VIEW (HIDE LEFT NAVPANE): 1501000000000000000000007B020000 set _EXPLORER_VIEW_MYPREF_=1501000000000000000000007B020000 REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [END] <<<<<<<<<<<<<< REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< REM ----- RUN THE TASK . . . REM ----- REGKEY ''HKCU/Software/Microsoft/Windows/CurrentVersion/Explorer/Modules'' DOES NOT EXIST IN NT5 OR EARLIER REM ----- BUT TO ELIMINATE DOUBT WE WILL PERFORM A CONDITIONAL VERSION CHECK for /f "tokens=2 delims=[]" %%A in (''ver'') do set _THIS_OS_VERSTRING_=%%A set _THIS_OS_VERSTRING_=%_THIS_OS_VERSTRING_:Version =% for /f "tokens=1,2,3* delims=." %%A in ("%_THIS_OS_VERSTRING_%") do set _THIS_OS_MAJORVERSION_=%%A if %_THIS_OS_MAJORVERSION_% leq 5 goto SKIP1 set _EXPLORER_VIEW_REGKEY_=HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/Modules/GlobalSettings/Sizer set _EXPLORER_VIEW_REGVAL_=PageSpaceControlSizer if exist ~TMP.TXT type NUL > ~TMP.TXT reg.exe query %_EXPLORER_VIEW_REGKEY_% > ~TMP.TXT if %ERRORLEVEL% equ 1 goto SKIP1 for /f "delims=" %%A in (''type "~TMP.TXT" ^|find.exe /i "%_EXPLORER_VIEW_REGVAL_%"'') do echo %%A>~TMP.TXT for /f "tokens=1-3 delims= " %%A in (''type "~TMP.TXT"'') do set _EXPLORER_VIEW_SYSTEMPREF_=%%C reg.exe add %_EXPLORER_VIEW_REGKEY_% /v %_EXPLORER_VIEW_REGVAL_% /t REG_BINARY /d %_EXPLORER_VIEW_MYPREF_% /f 2>nul >nul nircmd.exe wait %_WAITTIME_% :SKIP1 nircmd.exe exec show "explorer.exe" /n,%_M2_WINLEFT_% nircmd.exe wait %_WAITTIME_% nircmd.exe win setsize foreground %_M2_WINLEFTX_% %_M2_WINLEFTY_% %_M2_WINLEFTW_% %_M2_WINLEFTH_% nircmd.exe wait %_WAITTIME_% nircmd.exe exec show "explorer.exe" /n,%_M2_WINRIGHT_% nircmd.exe wait %_WAITTIME_% nircmd.exe win setsize foreground %_M2_WINRIGHTX_% %_M2_WINRIGHTY_% %_M2_WINRIGHTW_% %_M2_WINRIGHTH_% REM ----- RESET SYSTEM PREF, CLEAR MEMORY, CLEANUP, QUIT . . . find.exe /i /c "%_EXPLORER_VIEW_REGVAL_%" ~TMP.TXT if %ERRORLEVEL% equ 1 goto SKIP2 nircmd.exe wait %_WAITTIME_% nircmd.exe wait %_WAITTIME_% reg.exe add %_EXPLORER_VIEW_REGKEY_% /v %_EXPLORER_VIEW_REGVAL_% /t REG_BINARY /d %_EXPLORER_VIEW_SYSTEMPREF_% /f 2>nul >nul :SKIP2 set _M1_SCREENW_= set _M1_SCREENH_= set _M2_SCREENW_= set _M2_SCREENH_= set _M2_WINLEFT_= set _M2_WINLEFTX_= set _M2_WINLEFTY_= set _M2_WINLEFTW_= set _M2_WINLEFTH_= set _M2_WINRIGHT_= set _M2_WINRIGHTX_= set _M2_WINRIGHTY_= set _M2_WINRIGHTW_= set _M2_WINRIGHTH_= set _WAITTIME_= set _THIS_OS_VERSTRING_= set _THIS_OS_MAJORVERSION_= set _EXPLORER_VIEW_REGKEY_= set _EXPLORER_VIEW_REGVAL_= set _EXPLORER_VIEW_MYPREF_= set _EXPLORER_VIEW_SYSTEMPREF_= del /f /q ~TMP.TXT del /f /q ~TMP2.TXT popd exit



Más . . .
Ejecute un programa de línea de comandos y establezca la posición / tamaño de la ventana de la consola

Este archivo demo por lotes ejecutará un programa de línea de comandos y establecerá la posición y el tamaño de la ventana de la consola del símbolo del sistema. El tema general de este lote es el mismo que las dos soluciones anteriores, pero hubo algunos problemas únicos y soluciones para hacer que esto funcione ---- esta es una ventana del símbolo del sistema alojada por ''CMD.EXE'' y no una ventana de GUI como ''EXPLORER.EXE'' ---- Lea todos los comentarios en el archivo por lotes para obtener más información. Lea la descripción también.

Herramientas utilizadas:
1. MonitorInfoView por Nir Sofer (41 KB) ........ homepage
2. NirCmd por Nir Sofer (43 KB) ......................... http://www.nirsoft.net/utils/nircmd.html
3. GetPIDs por Daniel Scheibli (280 KB) .............. homepage
4. Un programa de línea de comandos ......................... para esta demostración, ejecuto ''UPX.EXE'' desde el mismo directorio como lote. .. homepage
5. Un archivo por lotes (6 KB) ......................................... vea abajo

Reúna los cinco archivos en un directorio.
Este es el archivo por lotes, listo para ejecutarse en cualquier sistema Windows (ejecútelo para una demostración instantánea) :

Lo que hará este lote de demostración, además de presentarle una ventana de consola personalizada, será ejecutar upx.exe con el upx.exe de línea de comandos --best -v -o getpids-compressed.exe getpids.exe . Vamos a comprimir nuestra herramienta GetPIDs (que tiene 280 KB) ¡hasta 88 KB! .......... después del lanzamiento, haga doble clic en la barra de título de esta ventana de la consola para ver un fenómeno interesante; ¡esta ventana de consola se comporta como una 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 %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_=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_=./ <<<<<<<program and batch in same directory REM ----- | | dot backslash *OR* dot (trailing backslash is optional). REM ----- | | set _MYPROGRAMDIR_=%dp0% <<<<<<<program and batch in same directory REM ----- | | same locatiion as previous but using environment variable. REM ----- | | set _MYPROGRAMDIR_=../ <<<<<<<program is back one directory from batch REM ----- | | dot dot backslash *OR* dot dot (trailing backslash is optional). REM ----- | | set _MYPROGRAMDIR_=%dp0%/.. <<<<<<<program is back one directory from batch REM ----- | | same as location as previous but using environment variable. REM ----- | | set _MYPROGRAMDIR_=%SYSTEMROOT%/../My Utilities <<<<<<<program is back one directory from the Windows folder REM ----- | | and then forwards into the folder ''My Utilities'' REM ----- | | set _MYPROGRAMDIR_=C:/My Utilities/ <<<<<<<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 ----- SEE <http://superuser.com/questions/306167/how-to-prevent-the-command-prompt-from-closing-after-execution> cmd.exe


Intente ejecutar sus programas desde el script VBS (Windows Script Host) a través del archivo por lotes. Si su VBS tiene este aspecto:

''FILENAME: SetEnv.vbs Set Shell = WScript.CreateObject("WScript.Shell") Shell.Run "Explorer /n,c:/develop/jboss-4.2.3.GA/server/default/deploy", 4, False Shell.Run "Explorer /n,c:/develop/Project/Mapping/deploy", 4, False

El 4 significa abrir la ventana en su tamaño / posición más reciente. False significa que no esperará regresar antes de ejecutar la siguiente línea de su script. Desafortunadamente, esto no le da un control total de su tamaño de ventana / posicionamiento exacto, pero debe recordar el último tamaño / posicionamiento.

Más información aquí: http://www.devguru.com/Technologies/wsh/quickref/wshshell_Run.html

Entonces su nuevo SetEnv.cmd podría ser:

@echo off REM note there''s a difference between cscript and wscript REM wscript is usually the default launcher cscript SetEnv.vbs cd C:/develop/jboss-4.2.3.GA/bin run


Mira StartX . No lo he usado, pero parece que puede usarlo para iniciar una aplicación con una posición y tamaño específicos.

StartX, una utilidad muy simple que le permite llamar a la API de CreateProcess desde la línea de comando.

Algunos de sus parámetros de línea de comandos:

StartX ["title"] [/Dpath] [/MIN] [/MAX] [/Px,y] [/Scx1,cy1]

x, y: especifica el desplazamiento xey, en píxeles, de la esquina superior izquierda de una ventana si se crea una nueva ventana. El desplazamiento es desde la esquina superior izquierda de la pantalla.

cx1, cy2: especifica el ancho y el alto, en píxeles, de la ventana si se crea una nueva ventana.