Méthode simple pour exécuter un lot en tant qu'administrateur en utilisant javascript

Je veux dériver une méthode simple et fiable pour élever automatiquement un lot en cours d'exécution sans utiliser de fichiers VBS supplémentaires ou raccourcis élevés, proposés dans d'autres threads. Appeler la boîte de dialogue UAC à partir du lot via javascript assure le code simple et court.

Le script ci-dessous élève automatiquement un utilisateur aux droits d'administrateur correctement, lorsque Oui est choisi dans la boîte de dialogue, mais les fenêtres contextuelles de la boîte de dialogue d'erreur (à l'extérieur de la fenêtre Cmd) " Windows ne peut pas trouver 'test.bat '". Peut-être puisque le chemin d'accès au fichier comprend des espaces? Comment réparer le code ou supprimer cette erreur?

@echo off :: test admin rights >nul 2>&1 net file echo '%errorlevel%' MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute("%~nx0", '', '', 'runas', 1);close();" :: test admin rights >nul 2>&1 net file echo '%errorlevel%' if !errorlevel! equ 0 echo Hello >%temp%\tst.txt exit /b 

J'ai réparé le script, et maintenant il fonctionne très bien. Selon mes recherches, c'est la manière la plus simple et la plus simple de donner dynamiquement aux administrateurs des privilèges d'administrateur pour la durée de cette session Cmd dans un lot en cours d'exécution publié n'importe où.

Il ne nécessite pas d'utiliser des fonctions, des constructions hybrides batch et VBS, des fichiers supplémentaires ou des raccourcis élevés. Il est originaire de Windows. Les utilisateurs peuvent ajouter leur propre code de tâche dans la section :usercode à exécuter par le lot.

 @echo off setlocal EnableDelayedExpansion :: test and acquire admin rights cd /d %~dp0 & echo/ if not "%1"=="UAC" ( >nul 2>&1 net file && echo Got admin rights || (echo No admin rights & ^ MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute("%~snx0", 'UAC', '', 'runas', 1);close();")) :: re-test admin rights echo/ & >nul 2>&1 net file && (echo Got admin rights & echo/) || (echo No admin rights. Exiting... & goto :end) :usercode :: add your code here echo Performing admin tasks echo Hello >C:\test.txt :end timeout /t 5 >nul exit /b