[英]Windows Batch: findstr not setting ERRORLEVEL within a for loop
[英]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.