簡體   English   中英

Windows批處理文件Net命令未設置錯誤級別

[英]Windows batch file net command not setting errorlevel

我正在嘗試確定腳本是否在Win7上以管理員權限運行,但是執行“ net”命令后似乎並沒有始終設置錯誤級別...

這是(簡化)我的代碼:

net session >null 2>$1
if %errorLevel% == 0 (
  echo This seems to be mighty ADMIN...
) else (
  echo Poor sod... no Admin, no glory - errorLevel: %errorLevel%
)

@SETLOCAL
@set TSTHOME=%~dp0
@set TSTNAME=%~n0

set SAL=NO
set SCL=NO
:VAL_PARM
  if .%1 == . @goto :VAL_PARM_END
  if /i %1 == SAL (
    net session >null 2>$1
    if %errorLevel% == 0 (
      set SAL=YES
    ) else (
      echo Option "SAL" requires Administrator priviliges (run "as Admin" or from an elevated command prompt)
      goto :EOF
    )
  ) else (
    if /i %1 == SCL (
      set SCL=YES
    ) else (
      echo off
      echo Invalid argument "%1"; correct syntax: %TSTNAME% [SAL] [SCL]
      echo                        where:   SAL: save agent  logs of each command
      echo                                 SCL: save client logs of each command
      echo                        NOTE: "SAL" requires "Administrator" privileges
      goto :EOF
    )
  )
  shift
  goto :VAL_PARM
:VAL_PARM_END

但是,當我從常規命令提示符下運行此命令時,輸出如下:

C:\\ MyDir> isAdmin sal

C:\\ MyDir>網絡會話1>空2> $ 1

C:\\ MyDir> if 2 == 0(echo這似乎是強大的ADMIN ...)else(echo可憐的...沒有管理員,沒有榮耀-errorLevel:2)
草皮不好...沒有管理員,沒有榮耀-errorLevel:2

C:MyDir>設置SAL = NO

C:\\ MyDir>設置SCL = NO

C:\\ MyDir> if .sal ==。

C:\\ MyDir>如果/ I sal == SAL(
凈會話1>空2> $ 1
如果0 == 0(設置SAL = YES)
否則(回顯選項“ SAL”需要管理員特權(以“以管理員身份”運行或從提升的命令提示符下運行)
轉到:EOF)

為什么為了天堂的緣故,第二個“網絡會話”沒有設置errorLevel?

不要像這樣比較錯誤級別,因為變量將在if塊執行之前被擴展,因此保留了該塊之前的值。 請改用以下內容:

if not errorlevel 1 ...

或使用延遲擴展。 您可以在help set閱讀有關該內容的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM