基本批处理文件错误

基本批处理文件错误

我正在编写我的第一个批处理文件,有两个基本问题。我使用的是 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(总是先尝试,有些系统确实会通过已经嵌入的引号,有些则不会,所以最好先进行测试。

相关内容