Estou escrevendo meu primeiro arquivo em lote e tenho duas perguntas básicas. Estou usando o Windows7 e me pergunto se existe uma maneira fácil de executar algo como administrador? No momento, basta digitar cmd
na barra de pesquisa e clicar em ctrl + shift + enter
. Posso clicar com o botão direito do mouse no arquivo e optar por executá-lo como administrador, mas gostaria de saber se poderia tornar isso parte do meu arquivo em lote. A segunda parte da minha pergunta é como passar argumentos para um programa que estou abrindo. No momento estou usando o seguinte 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
Eu executei este arquivo colando o seguinte na linha de comando, depois de fazer o cd no seguinte diretório: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"
Meu código de arquivo em lote apresenta um erro em um novo terminal, mas desaparece antes que eu possa lê-lo e não sei o que está errado.
Responder1
O runas
comando é o que fornece essa habilidade para você. Isso permitirá que você execute qualquer programa como outra pessoa:
runas /noprofile /user:minhamáquina\administrador cmd
Como você pode ver na citação acima, basta especificar o usuário apropriado na lista e pronto, você executa como esse usuário.
O problema nativo com esse método é o fato de que a senha a) precisará ser inserida manualmente (se o usuário não for administrador) ou b) a senha será exposta no runas
comando.
Existem outros utilitários por aí:
elevate
é um desses. Você pode baixá-lo aqui: Elevar WinAbility. Este programa basicamente permite que você execute qualquer comando como um usuário elevado, mesmo em um prompt de comando que não seja administrativo.
Para responder à sua segunda pergunta; ao passar informações para o script, você deve usar a sintaxe de argumento de comando adequada:
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
A %1, %2, %3
sintaxe refere-se aos parâmetros reais passados ao programa, podendo incluir nomes de arquivos, programas, etc., desde que as informações caiam na janela como um nome de arquivo válido ou entrada de texto.
A mesma sintaxe de comando acima ainda se aplica à passagem de parâmetros de linha de comando com espaços:
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 "
No entanto, se você estiver arrastando/soltando, você deve adquirir o hábito de citar o %3
parâmetro ou qualquer outro parâmetro (sempre tente primeiro, alguns sistemas passam com as aspas já incorporadas, outros não, então é melhor testar primeiro).