Erro básico de arquivo em lote

Erro básico de arquivo em lote

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 cmdna 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 runascomando é 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 runascomando.

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, %3sintaxe 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 %3parâ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).

informação relacionada