Error básico del archivo por lotes

Error básico del archivo por lotes

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 cmden 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 runascomando 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 runascomando.

Existen otras utilidades:

  • elevatees 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, %3sintaxis 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 %3usted 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).

información relacionada