基本批次檔錯誤

基本批次檔錯誤

我正在編寫第一個批次文件,有兩個基本問題。我正在使用 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 到以下目錄後,我透過將以下內容貼到命令列中來運行此檔案: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就是這樣的一個。你可以在這裡下載: 勝率提升。該程式基本上允許您以提升的用戶身份運行任何命令,即使在非管理員命令提示字元中也是如此。

回答你的第二個問題;將訊息傳遞給腳本時,您必須使用正確的命令參數語法:

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(始終先嘗試,有些系統確實通過了已嵌入的引號,有些系統則不然,因此最好先測試。

相關內容