Я пишу свой первый пакетный файл и у меня два основных вопроса. Я использую 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
или иной параметр самостоятельно (всегда пробуйте сначала, некоторые системы проходят с уже встроенными кавычками, некоторые — нет, поэтому лучше сначала протестировать).