Я пишу свой первый пакетный файл и у меня есть два основных вопроса. Я использую 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 ответ1

2

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

runas /noprofile /user:mymachine\administrator cmd

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

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

Есть и другие утилиты:

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .