2017-06-21 12 views
0

私は現在、学校用のコードを作成しています。学生はWindowsデバイスで管理者としてバッチファイルを実行し、ネットワークインフラストラクチャ。現在のディレクトリから管理者としてバッチファイル(.bat)を実行

@echo Welcome to the Mossman State High School Additional Features Installer 
@pause 

@echo Starting the Credentials GUI 
@echo Starting PaperCut Installer 
@start "" %~dp0BYOx.exe 
@start "" %~dp0client-local-install.exe 

@echo Creating Printing Directory 
@md C:\Printing 

@echo Copying Print Mapping Files 
@copy "" %~dp0configuration.xml C:\Printing /E /W 
@copy "" %~dp0student_printers.xml C:\Printing /E /W 
@copy "" %~dp0PrintMap2.exe C:\Printing /E /W 

@copy "" %~dp0StudentPrinting.sfx.exe C:\ /E /W 

@echo Running Connect Printer Setup 
@start "C:\" StudentPrinting.sfx.exe 

@echo Please complete the instructions on BYOx and PaperCut to finilize 
onboarding. 
@pause 

によりStudentPrinting.sfx.exeプログラムが以前に書かれた方法に、それはCから実行する必要がありますよう:\ディレクトリには、それは管理者として実行する必要があります。

私はもともと%~dp0パラメータが働いていたが、さらにテストが行​​われたことを発見した。 C:\Users\ComputerOne\Desktop\Auto_Installerが動作しますが、C:\Users\Computer One\Desktop\Auto_Installerはコンピュータと1の間のスペースのためにありません。 12歳から18歳までの学生に使用されるため、これを修正することはできません。

バッチファイルを管理者として実行する方法はありますか?まだそこにあるディレクトリから実行しますか?

+2

最初に '@echo off'の代わりに1行に' @ command'を使うのはなぜですか? – Regejok

+3

['START'](http://ss64.com/nt/start.html)と[' COPY'](http://ss64.com/nt/copy.html)の正しい構文を見てください。コマンド。また、[SS64のCMD.EXEリファレンス](http://ss64.com/nt/)でブラウズすると非常に便利です。 –

答えて

0

まず、現在のディレクトリがスクリプトのディレクトリと一致することを確認します。 (その方法で接頭辞%〜dp0は必要ありません)Startを使用し、Copyコマンドが間違ったオプションで間違った構文を使用しているように見える理由がないようです。

@Echo Off 

If /I Not "%CD%\"=="%~dp0" CD /D "%~dp0" 

Echo Welcome to the Mossman State High School Additional Features Installer 
Timeout 5 /NoBreak>Nul 

Echo Copying Print Mapping Files 
If Not Exist C:\Printing\ (
    Echo Creating Printing Directory 
    MD C:\Printing 
) 
Copy /Y configuration.xml C:\Printing 
Copy /Y student_printers.xml C:\Printing 
Copy /Y PrintMap2.exe C:\Printing 

Echo Copying printer Setup Files 
Copy /Y StudentPrinting.sfx.exe C:\ 

Echo Running Connect Printer Setup 
C:\StudentPrinting.sfx.exe 

Echo Please complete the instructions on BYOx and PaperCut to finilize onboarding. 

Echo Starting the Credentials GUI 
BYOx.exe 

Echo Starting PaperCut Installer 
client-local-install.exe 

Echo(
Echo Finished. Press any key to exit... 
Timeout -1 

、他の2回の実行がそれに応じて調整してくださいその後、実行された前に、プリンタのセットアップを実行することができない場合、私は、より多くの意味を作るように見えるものに周りを順序を変更しました。管理者のためのコードチェックの 最初のブロックとそうでない、またはすでにある場合、それは管理者としてコマンドを実行した場合に受け入れることを求められます:私は、これは適切なソリューションであることを理解するものから、[OK]を

+0

単に 'cd/D"%〜dp0。 "'(no 'if')を使うのはなぜですか? – aschipfl

+0

最終製品に関して違いがないか、エラーが表示されないと主張することができます。しかし、私はそれがより良い習慣だと思う。 *(すでに白く塗られている場合は壁を白く塗りたくない)*。 – Compo

0

。 次に、PUSHD%〜dp0は現在のディレクトリで作業していることを確認します。.batは(C:\の場合) .batファイルと同じディレクトリにある場合は、プログラム名だけ使用できます。 (パスを指定する必要はありませんが)

保存これは.BATとして、また(私はあなたが後に自分のコードを入れて指定した行を見て)必要に応じてあなたのコードでそれを適応しよう:

@echo off&cls 
REM --> CHECKING FOR ADMIN 
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system" 
) ELSE (
>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" 
REM -----------------PUT YOUR COMMANDS BELOW THIS LINE------------------- 
CLS 
PUSHD %~dp0 
echo %CD% 
echo. 
echo HELLO! 
echo. 
pause 
0

ビッグおかげでCompo &プログラミングを支援するためのRaphael。私は仮想マシン上でプログラムをテストし、期待どおりに動作します。

完成コードは次のとおりです。

@echo off&cls 
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" 
"%SYSTEMROOT%\SysWOW64\config\system" 
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" 
"%SYSTEMROOT%\system32\config\system" 
) 

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" 

If /I Not "%CD%\"=="%~dp0" CD /D "%~dp0" 

echo Welcome to the Mossman State High School Additional Features Installer 
timeout 1 /NoBreak>Nul 

echo Copying Print Mapping Files 
if not exist C:\Printing\ (
    echo Creating Printing Directory 
    md C:\Printing 
) 
copy /Y configuration.xml C:\Printing 
copy /Y student_printers.xml C:\Printing 
copy /Y PrintMap2.exe C:\Printing 

echo Copying Printer Setup Files 
copy /Y StudentPrinting.sfx.exe C:\ 

echo Running Connect Printer Setup 
C:\StudentPrinting.sfx.exe 

echo Please complete the instructions on BYOx and PaperCut to finilize 
onboarding. 

echo Starting the Credentials GUI 
start BYOx.exe 

echo Starting PaperCut Installer 
start client-local-install.exe 

echo(
echo Finished. Press any key to exit... 
timeout -1 
関連する問題