Erro no arquivo de lote básico

0

Estou escrevendo meu primeiro arquivo de lote e tenho duas perguntas básicas. Estou usando o Windows7 e imaginando 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 . Eu posso clicar com o botão direito do mouse no arquivo e optar por executá-lo como admin, mas eu queria saber se eu poderia fazer essa parte do meu batchfile. 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.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.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.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 digitar no seguinte diretório: C:\Program Files (x86)\PostgreSQL.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 dá um erro em um novo terminal, mas ele desaparece antes que eu possa lê-lo e não sei o que está errado.

    
por celenius 05.02.2012 / 18:27

1 resposta

2

O comando runas é o que fornece essa capacidade para você. Ele permitirá que você execute qualquer programa como outra pessoa:

runas /noprofile /user:mymachine\administrator cmd

Como você pode ver na citação acima, basta especificar o usuário apropriado da lista e, assim, você executará esse usuário.

O problema nativo com esse método é o fato de que a senha irá ou a) precisar ser inserida manualmente (se o usuário não for um usuário administrador), ou b) a senha será exposta no comando runas .

Existem outros utilitários por aí:

  • elevate é um desses. Você pode baixá-lo aqui: WinAbility Elevate . Este programa basicamente permite que você execute qualquer comando como um usuário elevado, mesmo a partir de um prompt de comando não admin.

Para responder sua segunda pergunta; ao passar informações para o script, você tem que usar a sintaxe correta do argumento de comando:

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 sintaxe %1, %2, %3 refere-se aos parâmetros reais passados para o programa, isso pode 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 aplica-se também à passagem de parâmetros de linha de comando com espaços neles:

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, deve adquirir o hábito de realmente citar o parâmetro %3 ou qualquer parâmetro (tente sempre primeiro, alguns sistemas passam com as aspas já incorporadas, outros não, então melhor para testar primeiro.

    
por 05.02.2012 / 20:19