我正在嘗試編寫一個批處理文件,該文件會自動創建包括快捷方式的文件夾結構。 爲了創建快捷方式,我使用需要管理員權限的「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