Ich habe die folgende Batch-Datei, die eine Netzwerkfreigabe mit cmd als Administrator erstellt. Wenn es von einem beliebigen Verzeichnis auf dem Laufwerk c: ausgeführt wird, werden zwei Eingabeaufforderungsfenster geöffnet, und es wird darauf gewartet, dass der Benutzer eine Taste drückt. Bei Ausführung von einem anderen Laufwerk blinkt jedoch schnell 2 Eingabeaufforderungsfenster, wird ausgeblendet und der Befehl wird nicht ausgeführt. Wie kann ich es von jedem Laufwerk aus zum Laufen bringen?
@echo off
:: BatchGotAdmin
::-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"="
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
pushd "%CD%"
CD /D "%~dp0"
::--------------------------------------
::ENTER YOUR CODE BELOW:
net share sharename=C:\tada /grant:everyone,FULL
echo ...
echo ...
echo PLEASE CHECK ABOVE IF SHARE WAS SUCCESFUL. YOU MAY NOW CLOSE THE WINDOW(S)
echo ...
echo ...
pause
Aktualisieren:
Ausführen aus einem beliebigen Unterverzeichnis in C:
Works. Laufen es von G:
Werken. Das Ausführen von G:\Users\myname\Documents\couple_more_subfolders
funktioniert nicht
windows-10
batch-file
Blaine
quelle
quelle
powershell -c start -verb runas "%0"
würde es ohne eine temporäre Datei tun. Ich bin mir nicht sicher, ob das Ihr Problem lösen würde.@echo off
Sie zuerst das Symbol, damit Sie sehen können, welche Befehle ausgeführt werden. Ersetzen Sie dann alle Stellen, an denen Sie die Batch-Datei aufrufen, z. B. durch%0
,cmd /k %0
damit das Fenster auch dann angezeigt wird, wenn das Skript vorzeitig beendet wird.%0
. Wo soll ich setzencmd /k
?UAC.ShellExecute
ersetzen Sie in der Zeile das/c
mit/k
. Aber ich würde PS definitiv über VBS empfehlen.Antworten:
Ich habe ein anderes Skript gefunden, das dieses Problem nicht hat. Es stellt sich heraus, dass der erste fehlschlägt, wenn in dem Dateipfad, in dem er sich befindet, ein Leerzeichen vorhanden ist (das hatte also wirklich nichts mit dem Laufwerksbuchstaben zu tun):
quelle