我正在编写我的第一个批处理文件,有两个基本问题。我使用的是 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
我通过将以下内容粘贴到命令行中 (cd-ing 到以下目录后) 来运行此文件: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
正如您从上面的引文中看到的,您只需从列表中指定适当的用户,然后就可以以该用户的身份运行。
此方法的本机问题是,密码要么 a) 需要手动输入(如果用户不是管理员用户),要么 b) 密码将在命令中暴露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
(总是先尝试,有些系统确实会通过已经嵌入的引号,有些则不会,所以最好先进行测试。