Variablen mit Leerzeichen als admin an die Befehlszeile übergeben

1052
Frontender

starker text script.bat im sendTo-Ordner abgelegt (Datei, deren Ausführung als admin aus den Eigenschaften -> erweitert -> als admin ausgeführt ausgeführt wird)

@echo off  cd %~dp1  echo %~dp1  echo "%~1"  pause 

Wenn ich dieser Datei mit einem Rechtsklick -> sendto -> script.bat einen Parameter übergebe, zum Beispiel eine Datei, die das Skript per Superuser acc.txt ausführt, funktioniert dies, aber wenn ich das Skript als Administrator ausführe, wird ein cmd-Fenster für eine Sekunde angezeigt und nicht arbeiten.

Wie kann ich dieses Skript als Admin ausführen? Nach diesem Codeausschnitt gibt es einen Befehl, der Administratorrechte erfordert.

edit # 1 Ich denke, das Problem hängt mit dem Dateinamen oder Pfadnamen zusammen, mit Leerzeichen wie "c: \ Pfad zum Speicherplatz \" oder "Datei mit Leerzeichen.txt" und Ausführen des Skripts als Administrator.

0

2 Antworten auf die Frage

0
Karan

Sie können den Befehl runas wie folgt verwenden:

runas /user:username program 

Sie können auch etwas wie Elevate verwenden, ein Befehlszeilen-UAC-Hilfsprogramm, das speziell für den Befehl verwendet wird, für den Administratorrechte erforderlich sind:

elevate [(-c | -k) [-n] [-u]] [-w] command  Options: -c Launches a terminating command processor; equivalent to "cmd /c command". -k Launches a persistent command processor; equivalent to "cmd /k command". -n When using -c or -k, do not pushd the current directory before execution. -u When using -c or -k, use Unicode; equivalent to "cmd /u". -w Waits for termination; equivalent to "start /wait command". 
0
JosefZ

Erstellen Sie eine Verknüpfung zu Ihrer Batchdatei im shell:sendtoOrdner und ändern Sie die Eigenschaften wie folgt:

  • rechter Mausklick -> "Eigenschaften" -> ShortcutRegisterkarte;
  • Ziel -> cmd /C "D:\bat\SU\931003.bat";
  • Advanced Schaltfläche -> Als Administrator ausführen.

Beachten Sie, dass das erste echo "%CD%"im nächsten Codeausschnitt das anfängliche Arbeitsverzeichnis Ihres Skripts zeigt ( "C:\Windows\system32"wenn es von einer SendToFunktion gestartet wird ):

==>type D:\bat\SU\931003.bat @echo off echo initial working directory "%CD%" pushd "%~dp1" echo current working directory "%CD%" echo paramer #1 supplied "%~1" echo all paramers %* net session pause 

Stapelverknüpfung im Ordner "SendTo" (als Administrator auszuführen)

Beispielausgabe

initial working directory "C:\Windows\system32" current working directory "D:\bat\1 & 2" paramer #1 supplied "D:\bat\1 & 2\931003 test.txt" all paramers "D:\bat\1 & 2\931003 test.txt" "D:\bat\1 & 2\batchfile.bat" There are no entries in the list.  Press any key to continue . . . 

Die obige Ausgabe zeigt:

  • arbeitet mit einem etwas ungewöhnlichen Pfad und Dateinamen, der nicht nur Leerzeichen enthält, sondern auch &Zeichen und ...
  • arbeitet als Administrator, da der net sessionBefehl andernfalls Fehlermeldungen System error 5 has occurredund Access is deniedFehlermeldungen zurückgibt .
Hallo, ich habe deinen Code ausprobiert. Wenn ich einen Dateinamen oder einen Pfadnamen wie "langer Pfad" mit Leerzeichen habe, mit vom Administrator geprüften Optionen funktioniert das nicht. Das Batch-Skript befindet sich in d: \ batch \ run.bat, mein Betriebssystem ist in c: Frontender vor 8 Jahren 0
** Wichtig **: Ihr Verknüpfungsziel ** im Ordner `shell: SendTo` sollte` cmd / C d: \ batch \ run.bat` sein (beachten Sie, dass Windows es in `C: \ Windows \ übersetzt. System32 \ cmd.exe / C d: \ batch \ run.bat` automatisch nach Klicken auf "Übernehmen") JosefZ vor 8 Jahren 0
Vielen Dank, scheint gerade zu funktionieren. Ich hatte ein Problem gefunden. Wenn der Pfadname des Verzeichnisses mit dem .bat-Skript wie "Batch-Skript im Inneren" aussieht, funktioniert das Skript nicht. Es ist kein echtes Problem, verwenden Sie einfach einen Namen wie "Batch". Frontender vor 8 Jahren 0