Grundlegender Batchdateifehler

Grundlegender Batchdateifehler

Ich schreibe meine erste Batchdatei und habe zwei grundlegende Fragen. Ich verwende Windows 7 und frage mich, ob es eine einfache Möglichkeit gibt, etwas als Administrator auszuführen. Im Moment gebe ich einfach cmdin die Suchleiste ein und drücke ctrl + shift + enter. Ich kann mit der rechten Maustaste auf die Datei klicken und sie als Administrator ausführen, aber ich frage mich, ob ich dies zu einem Teil meiner Batchdatei machen kann. Der zweite Teil meiner Frage ist, wie ich Argumente an ein Programm übergebe, das ich öffne. Im Moment verwende ich den folgenden Code:

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

Ich habe diese Datei ausgeführt, indem ich Folgendes in die Befehlszeile eingefügt habe, nachdem ich mit CD in das folgende Verzeichnis gewechselt bin: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"

Mein Batchdateicode gibt auf einem neuen Terminal einen Fehler aus, der jedoch verschwindet, bevor ich ihn lesen kann, und ich weiß nicht, was schief läuft.

Antwort1

Der runasBefehl ermöglicht Ihnen diese Möglichkeit. Er ermöglicht es Ihnen, jedes Programm ALS jemand anderes auszuführen:

runas /noprofile /user:meineMaschine\Administrator cmd

Wie Sie dem obigen Zitat entnehmen können, geben Sie einfach den entsprechenden Benutzer aus der Liste an und schon laufen Sie als dieser Benutzer.

Das native Problem bei dieser Methode besteht darin, dass das Kennwort entweder a) manuell eingegeben werden muss (wenn der Benutzer kein Administrator ist) oder b) das Kennwort im runasBefehl preisgegeben wird.

Es gibt noch andere Dienstprogramme:

  • elevateist eines davon. Sie können es hier herunterladen: WinAbility Elevate. Mit diesem Programm können Sie grundsätzlich jeden Befehl als Benutzer mit erhöhten Rechten ausführen, sogar von einer Eingabeaufforderung ohne Administratorrechte aus.

Um Ihre zweite Frage zu beantworten: Wenn Sie Informationen an das Skript übergeben, müssen Sie die richtige Befehlsargument-Syntax verwenden:

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

Die %1, %2, %3Syntax bezieht sich auf die tatsächlichen Parameter, die an das Programm übergeben werden. Dazu können Dateinamen, Programme usw. gehören, solange die Informationen als gültiger Dateiname oder Texteintrag in das Fenster eingefügt werden.

Für die Übergabe von Befehlszeilenparametern mit Leerzeichen gilt weiterhin die gleiche Befehlssyntax wie oben:

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 "

Wenn Sie jedoch ziehen und ablegen, sollten Sie sich angewöhnen, den %3oder den Parameter selbst in Anführungszeichen zu setzen (versuchen Sie es immer zuerst, einige Systeme funktionieren mit bereits eingebetteten Anführungszeichen, andere nicht, also testen Sie am besten zuerst).

verwandte Informationen