我正在尝试编写一个批处理文件,该文件会自动创建包括快捷方式的文件夹结构。 为了创建快捷方式,我使用需要管理员权限的“mklink”。 我已经使用本网站上的代码
(http://winaero.com/blog/how-to-auto-elevate-a-batch-file-to-run-it-as-administrator/),以便自动给我这些权利。作为批处理文件中当前目录的UNC路径,请求管理员权限
但是,当我在我的机器上本地运行它时,下面的代码完全正常工作,但是当我将它放在要运行的服务器位置时,命令提示符在我将yes/no在对话框窗口中选择管理员权限。 我没有收到错误代码,但我发现它可能与 “CMD不支持作为当前目录的UNC路径”有关。 我曾尝试使用pushd和其他在论坛上找到的东西来解决此类问题,但现在我已开始在想法上干枯了。
有没有人有我想知道如何解决这个问题? 在此先感谢!
chcp 1252
::::::::::::::::::::::::::::::::::::::::::::
:: Run as admin
::::::::::::::::::::::::::::::::::::::::::::
@echo off
CLS
ECHO.
ECHO =============================
ECHO The name of the main folder?
ECHO =============================
:init
setlocal DisableDelayedExpansion
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
setlocal EnableDelayedExpansion
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' (goto gotPrivileges) else (goto getPrivileges)
:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
ECHO args = "ELEV " >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " " >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
"%SystemRoot%\System32\WScript.exe" "%vbsGetPrivileges%" %*
exit /B
:gotPrivileges
setlocal & pushd .
cd /d %~dp0
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul & shift /1)
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
::Dialogwindow.
@echo off
title message
echo Skriv nedan^^!
set/p "Projektnamn=>"
:: Creates the folder structure
md "%~dp0"%Projektnamn%
md "%~dp0""%Projektnamn%"/"1. Projektpärm"
md "%~dp0""%Projektnamn%"/"1. Projektpärm"/"1. Tekniska specifikationer"
md "%~dp0""%Projektnamn%"/"1. Projektpärm"/"2. ÄTA,Beställning & Fakturering"
md "%~dp0""%Projektnamn%"/"1. Projektpärm"/"3. Tidplan"
md "%~dp0""%Projektnamn%"/"1. Projektpärm"/"4. Projektmöten"
md "%~dp0""%Projektnamn%"/"1. Projektpärm"/"5. Dagbok"
md "%~dp0""%Projektnamn%"/"1. Projektpärm"/"6. Kvalitet"
:: Genväg enlinjeschema, se kod för genväg
md "%~dp0""%Projektnamn%"/"2. Kretsschema"
md "%~dp0""%Projektnamn%"/"2. Kretsschema"/"1. Konstruktionsunderlag från kund"
md "%~dp0""%Projektnamn%"/"3. Stationsdokumentation"
md "%~dp0""%Projektnamn%"/"3. Stationsdokumentation"/"1. Enlinjeschema"
md "%~dp0""%Projektnamn%"/"3. Stationsdokumentation"/"2. Blockschema"
md "%~dp0""%Projektnamn%"/"3. Stationsdokumentation"/"3. Förreglingsschema"
md "%~dp0""%Projektnamn%"/"3. Stationsdokumentation"/"4. Ritningsnummer"
md "%~dp0""%Projektnamn%"/"4. Skåpsdokumentation"
md "%~dp0""%Projektnamn%"/"4. Skåpsdokumentation"/"1. Skåpslayout"
md "%~dp0""%Projektnamn%"/"4. Skåpsdokumentation"/"2. Apparatlista"
md "%~dp0""%Projektnamn%"/"4. Skåpsdokumentation"/"3. Förbindningstabell"
md "%~dp0""%Projektnamn%"/"4. Skåpsdokumentation"/"4. Skyltlista & Etiketter"
:: Skapar RELATIVA Genvägarna
mklink /D "%~dp0%Projektnamn%\1. Projektpärm\7. Enlinjeschema" "..\3. Stationsdokumentation\1. Enlinjeschema"
mklink /D "%~dp0%Projektnamn%\1. Projektpärm\8. Blockschema" "..\3. Stationsdokumentation\2. Blockschema"
mklink /D "%~dp0%Projektnamn%\1. Projektpärm\9. Förreglingsschema" "..\3. Stationsdokumentation\3. Förreglingsschema"
mklink /D "%~dp0%Projektnamn%\1. Projektpärm\10. Skåpslayout" "..\4. Skåpsdokumentation\1. Skåpslayout"
pause
这不是我称之为[最小,完整且可验证的示例](http://stackoverflow.com/help/mcve)。无论如何,您可能正在寻找['pushd'](http://ss64.com/nt/pushd.html)和['popd'](http://ss64.com/nt/popd.html).. – aschipfl
如果以管理员身份打开cmd并从共享中运行批处理,会发生什么情况?默认情况下,本地映射共享在UAC模式下不可用 – LotPings
@Mofi当批处理文件存储在我的C:驱动器上时,我运行该批处理文件,这会将我带到具有管理员权限的对话窗口,之后,我可以编写我的主文件夹的名称,批处理文件创建包括快捷方式的文件夹结构。 当我另一方面把文件放在\\ server \ share \ Batch.bat并点击批处理文件(这是我打算如何运行它)命令提示符在对话框窗口之后imitiately关闭,它不让我键入我的主文件夹的名称。 我希望批处理文件只能位于服务器上。 这不可能吗? – user7305472