Estoy escribiendo mi primer archivo por lotes y tengo dos preguntas básicas. Estoy usando Windows 7 y me pregunto si existe una manera fácil de ejecutar algo como administrador. Por el momento simplemente escribo cmd
en la barra de búsqueda y presiono ctrl + shift + enter
. Puedo hacer clic derecho en el archivo y elegir ejecutarlo como administrador, pero me preguntaba si podría hacer que esto forme parte de mi archivo por lotes. La segunda parte de mi pregunta es cómo pasar argumentos a un programa que estoy abriendo. Por el momento estoy usando el siguiente código:
ECHO OFF
ECHO This will export a shapefile from my postgresql database
PAUSE
::START "pgsql2shp export" "C:\Program Files (x86)\PostgreSQL\9.1\bin\pgsql2shp.exe" [-f 'D:\test.shp' -h localhost -u postgres -p 5434 spatial_data 'SELECT * FROM public.energy']
::START "pgsql2shp export" "C:\Program Files (x86)\PostgreSQL\9.1\bin\" "-f 'D:\test.shp' -h localhost -u postgres -p 5434 spatial_data 'SELECT * FROM public.energy'" "pgsql2shp.exe"
START "pgsql2shp export" "C:\Program Files (x86)\PostgreSQL\9.1\bin\pgsql2shp.exe" "-f 'D:\test.shp' -h localhost -u postgres -p 5434 spatial_data 'SELECT * FROM public.energy'"
PAUSE
ECHO shpfile complete
PAUSE :: requires user input to end
Ejecuté este archivo pegando lo siguiente en la línea de comando, después de realizar un CD en el siguiente directorio:C:\Program Files (x86)\PostgreSQL\9.1\bin
>pgsql2shp.exe -f D:\test.shp -h localhost -u postgres -p 5434 spatial_data "SELECT
* FROM public.energy"
El código de mi archivo por lotes da un error en una nueva terminal, pero desaparece antes de que pueda leerlo y no sé qué está pasando.
Respuesta1
El runas
comando es lo que te proporciona esta habilidad. Le permitirá ejecutar cualquier programa COMO otra persona:
runas /noprofile /usuario:mimáquina\administrador cmd
Como puede ver en la cita anterior, simplemente especifica el usuario apropiado de la lista allí y, boom, ejecuta como ese usuario.
El problema nativo con este método es el hecho de que la contraseña a) deberá ingresarse manualmente (si el usuario no es un usuario administrador), ob) la contraseña quedará expuesta en el runas
comando.
Existen otras utilidades:
elevate
es uno de esos. Puedes descargarlo aquí: WinAbility Elevar. Básicamente, este programa le permite ejecutar cualquier comando como usuario elevado incluso desde un símbolo del sistema que no sea de administrador.
Para responder a su segunda pregunta; Al pasar información al script, debe utilizar la sintaxis de argumento de comando adecuada:
Z:\Users\Phillip>copy con go.cmd
@echo off
echo/Passed First Parameter: %1
echo/Passed Second Parameter: %2
echo/
echo/Pased Third Formatted Parameter: /d:%3
echo/
^Z
1 file(s) copied.
Z:\Users\Phillip>go yes no ok
Passed First Parameter: yes
Passed Second Parameter: no
Pased Third Formatted Parameter: /d:ok
La %1, %2, %3
sintaxis se refiere a los parámetros reales pasados al programa, esto puede incluir nombres de archivos, programas, etc., siempre que la información aparezca en la ventana como un nombre de archivo válido o una entrada de texto.
La misma sintaxis de comando anterior también se aplica para pasar parámetros de línea de comando con espacios:
Z:\Users\Phillip>go yes no "asdfasdfasdf asdf as dfa sdf "
Passed First Parameter: yes
Passed Second Parameter: no
Pased Third Formatted Parameter: /d:"asdfasdfasdf asdf as dfa sdf "
Sin embargo, si está arrastrando/soltando, debe adquirir el hábito de citar %3
usted mismo el parámetro o cualquier parámetro (siempre intente primero, algunos sistemas pasan con las comillas ya incorporadas, otros no, por lo que es mejor probar primero).