Основная ошибка пакетного файла

Основная ошибка пакетного файла

Я пишу свой первый пакетный файл и у меня два основных вопроса. Я использую Windows7 и мне интересно, есть ли простой способ запустить что-то от имени администратора? Сейчас я просто ввожу cmdв строку поиска и нажимаю ctrl + shift + enter. Я могу щелкнуть правой кнопкой мыши по файлу и выбрать запуск от имени администратора, но мне интересно, могу ли я сделать это частью моего пакетного файла. Вторая часть моего вопроса — как передать аргументы программе, которую я открываю. Сейчас я использую следующий код:

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

Я запустил этот файл, вставив следующее в командную строку, после перехода в следующий каталог: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"

Мой код пакетного файла выдает ошибку на новом терминале, но она исчезает до того, как я успеваю ее прочитать, и я не знаю, что происходит.

решение1

Команда runas— это то, что предоставляет вам эту возможность. Она позволит вам запустить любую программу КАК кто-то другой:

runas /noprofile /user:mymachine\administrator cmd

Как видно из приведенной выше цитаты, вы просто указываете соответствующего пользователя из списка и — бум! — работаете от имени этого пользователя.

Основная проблема этого метода заключается в том, что пароль либо а) придется вводить вручную (если пользователь не является администратором), либо б) пароль будет раскрыт при выполнении команды runas.

Существуют и другие утилиты:

  • elevateодин из таких. Скачать можно здесь: WinAbility Поднять. Эта программа по сути позволяет вам запускать любую команду от имени повышенного пользователя, даже из командной строки без прав администратора.

Чтобы ответить на ваш второй вопрос: при передаче информации в скрипт необходимо использовать правильный синтаксис аргументов команды:

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

Синтаксис %1, %2, %3относится к фактическим параметрам, передаваемым программе. Сюда могут входить имена файлов, программ и т. д., главное, чтобы информация отображалась в окне в виде допустимого имени файла или текстовой записи.

Тот же синтаксис команды, что и выше, применим и к передаче параметров командной строки, содержащих пробелы:

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 "

Однако если вы перетаскиваете/бросаете, вам следует привыкнуть заключать в кавычки тот %3или иной параметр самостоятельно (всегда пробуйте сначала, некоторые системы проходят с уже встроенными кавычками, некоторые — нет, поэтому лучше сначала протестировать).

Связанный контент