Board logo

标题: [求助]請reg 搭配ERRORLEVEL使用 [打印本页]

作者: XZ     时间: 2009-2-5 17:24    标题: [求助]請reg 搭配ERRORLEVEL使用

請問 reg 可不可以搭配ERRORLEVEL使用
或是用其他的方式可以達到需求

目的: 當REGISTER值存在時執行若數值不存在時則跳出
for /f "skip=4 tokens=3 delims=        " %%i in ('reg query HKCU\Software\Microsoft\Office\11.0\Outlook\Security /v "OutlookSecureTempFolder"') do (set OSTF=%%i)
if errorlevel 0 goto LU

echo Your Outlook Secure TempFolder Path is:
echo "%OSTF%"
echo.
goto end

:LU
echo by~~
goto end

:end

作者: yishanju     时间: 2009-2-5 17:43
if %%i 为空 退出
这样不行么
作者: XZ     时间: 2009-2-5 18:07


  Quote:
Originally posted by yishanju at 2009-2-5 05:43 PM:
if %%i 为空 退出
这样不行么

這位長官..我不確定行不行耶^^"
因為這個指令我不會用阿
SORRY~~ =    =

可否來個範例謝謝^^
作者: yishanju     时间: 2009-2-5 18:14
if /? 就有啊
作者: XZ     时间: 2009-2-9 12:02


  Quote:
Originally posted by yishanju at 2009-2-5 06:14 PM:
if /? 就有啊

Sir if搭配我還不太會用
說明書有看了 只是我不太清楚REG回傳的ERRORLEVEL數值有哪些!! ^^
在批次檔中執行條件處理。

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

  NOT               表示 Windows 應該只有在條件為偽時才執行命令。

  ERRORLEVEL number 當上一個執行的程式傳回的結束碼大於或等於指定
                    數字時,則條件為真。

  string1==string2  當指定的文字字串相符合時,則條件為真。

  EXIST filename    如果指定的檔名存在時,則條件為真。

  command           指定當條件為真時所要執行的命令。命令之後可以
                    接著 ELSE 命令。當指定條件為偽時,緊接在 ELSE
                    命令之後的命令將會被執行。

ELSE 子句必須出現在 IF 之後的同一行。例如:

    IF EXIST filename. (
        del filename.
    ) ELSE (
        echo filename. missing.
    )

以下命令無法作用,因為 del 命令必須以換行字元來結尾:

    IF EXIST filename. del filename. ELSE echo filename. missing

下面命令也無法作用,因為 ELSE 命令必須在與 IF 命令同一行的結尾:

    IF EXIST filename. del filename.
    ELSE echo filename. missing

下面命令只有在寫成一行時才能作用:

    IF EXIST filename. (del filename.) ELSE echo filename. missing

如果您啟用擴充命令,IF 的變更如下:

    IF [/I] string1 compare-op string2 命令
    IF CMDEXTVERSION 數字命令
    IF DEFINED 變數命令

compare-op 可以是:

    EQU - 等於
    NEQ - 不等於
    LSS - 小於
    LEQ - 小於或等於
    GTR - 大於
    GEQ - 大於或等於

而如果指定 /I 參數,則執行區分大小寫的字串比對。此 /I 參數也可使用
string1==string2 格式於 IF 命令。這些比對是通用的,因為在比對中,如
果 string1 及 string2 兩者皆由十進位數字所構成,則字串將會轉換為數
字,並執行數字的比對。

CMDEXTVERSION 條件式的運作和 ERRORLEVEL 一樣,除非它和與擴充命令相
關的內部版本編號作比對。第一個版本為 1。若擴充命令大幅度地增強時就
再加 1。當擴充命令停用時,CMDEXTVERSION 條件式永遠不為真。

DEFINED 條件式的運作和 EXISTS 一樣,除非它帶有環境變數名稱,如果環
境變數已定義則傳回 true 值。

%ERRORLEVEL% 將擴充到代表目前 ERRORLEVEL 變數的一個字串,前提是已
經沒有名為 ERRORLEVEL 的環境變數,在這個情況下,您會得到它的值。使
用此值和上面的數字比對運算元,您可以作下列的選擇:

    goto answer %ERRORLEVEL%
    :answer0
    提示您鍵入 Y 加以確定
    :answer1
    提示您鍵入N 加以否定

您也可使用上面的數字比對:

    IF %ERRORLEVEL% LEQ 1 goto okay

%CMDCMDLINE% 將擴充到比 CMD.EXE 的任何處理程序更早傳給 CMD.EXE 的
原始命令列,前提是已經沒有名為 CMDCMDLINE 的環境變數,在這個情形下,
您會得到它的值。

%CMDEXTVERSION% 將擴充成一個表示目前 CMDEXTVERSION 值的字串,
表示沒有名為 CMDEXTVERSION 的環境變數。這種情況下您將會得到它的值。

作者: wxcute     时间: 2009-2-9 13:33    标题: 用存在的、不存在的、禁止访问的项或值来测试。

reg query "键项" [/v "值"]
echo %errorlevel%
作者: XZ     时间: 2009-2-13 14:47


  Quote:
Originally posted by wxcute at 2009-2-9 01:33 PM:
reg query "键项" [/v "值"]
echo %errorlevel%

您好
我测试过您说的方式了
不管数值有没有存在
所得到的 ERRORLEVEL数值皆为 0
所以好像这样行不通耶
请问有别的方式吗?
谢谢
cd\
cls
for /f "skip=4 tokens=3 delims=        " %%i in ('reg query "HKCU\Software\Microsoft\Office\11.0\Outlook\Security" /v "OutlookSecureTempFolder"') do (set OSTF=%%i)
echo %errorlevel%
pause

C:\>for /F "skip=4 tokens=3 delims=     " %i in ('reg query "HKCU\Software\Micro
soft\Office\11.0\Outlook\Security" /v "OutlookSecureTempFolder"') do (set OSTF=%
i )

錯誤:  系統找不到指定的登錄機碼或值

C:\>echo 0
0

C:\>pause
請按任意鍵繼續 . . .

C:\>for /F "skip=4 tokens=3 delims=     " %i in ('reg query "HKCU\Software\Micro
soft\Office\11.0\Outlook\Security" /v "OutlookSecureTempFolder"') do (set OSTF=%
i )

C:\>(set OSTF=C:\Documents and Settings\VM\Local Settings\Temporary Internet Fil
es\OLK64\ )

C:\>echo 0
0

C:\>pause
請按任意鍵繼續 . . .

作者: XZ     时间: 2009-2-16 15:43
在FOR 裡面的不能判斷可能是我FOR的方式寫錯了吧ˇˇ
因為不在FOR底下是可以的

內容
reg query "HKCU\Software\Microsoft\Office\11.0\Outlook\Security" /v "OutlookSecureTempFolder" >nul
echo %errorlevel%

reg query "HKCU\Software\Microsoft\Office\11.0\Outlook\Security" /v "Outlook" >nul
echo %errorlevel%

pause
結果
C:\>reg query "HKCU\Software\Microsoft\Office\11.0\Outlook\Security" /v "Outlook
SecureTempFolder"  1>nul

C:\>echo 0
0

C:\>reg query "HKCU\Software\Microsoft\Office\11.0\Outlook\Security" /v "Outlook
"  1>nul

錯誤:  系統找不到指定的登錄機碼或值

C:\>echo 1
1

C:\>pause
請按任意鍵繼續 . . .
請問有人可以協助一下修改嗎?
謝謝!!
目的: 當REGISTER值存在時執行若數值不存在時則跳出,若數值存在須將該數值設成一變數提供後續與法使用
作者: zhengqian529     时间: 2009-2-16 15:48
errorlevel 这个值是系统返回的,你要不自己设置一个error变量:
1. 存在时,set error=1
2. 不存在时,set error=0
然后后面紧接你要执行的操作,不一定要纠结在%errorlevel%这个系统给定的变量
作者: XZ     时间: 2009-2-16 17:31


  Quote:
Originally posted by zhengqian529 at 2009-2-16 03:48 PM:
errorlevel 这个值是系统返回的,你要不自己设置一个error变量:
1. 存在时,set error=1
2. 不存在时,set error=0
然后后面紧接你要执行的操作,不一定要纠结在%errorlevel%这个系统给定的变量

恩 謝謝您!!
目前遇到另一個問題
@echo off
reg query "HKCU\Software\Microsoft\Office\11.0\Outlook\Security" /v "OutlookSecureTempFolder" >nul
if %errorlevel% EQU 0 (

for /f "skip=4 tokens=3 delims=        " %%i in ('reg query HKCU\Software\Microsoft\Office\11.0\Outlook\Security /v "OutlookSecureTempFolder"') do (set OSTF=%%i)

echo Your Outlook Secure TempFolder Path is:
echo "%OSTF%"
echo.
) ELSE (
echo Bye!!
)
pause
只要多了
reg query "HKCU\Software\Microsoft\Office\11.0\Outlook\Security" /v "OutlookSecureTempFolder" >nul
if %errorlevel% EQU 0 (

這兩行 就無法偵測出路徑的數值
結果如下


reg query "HKCU\Software\Microsoft\Office\11.0\Outlook\Security" /v "OutlookSecureTempFolder" >nul
if %errorlevel% EQU 0 (
結果
Your Outlook Secure TempFolder Path is:
""

請按任意鍵繼續 . . .

reg query "HKCU\Software\Microsoft\Office\11.0\Outlook\Security" /v "OutlookSecureTempFolder" >nul
if %errorlevel% EQU 0 (
加上REM
結果
Your Outlook Secure TempFolder Path is:
"C:\Documents and Settings\VM\Local Settings\Temporary Internet Files\OLK64\"

Bye!!
請按任意鍵繼續 . . .

作者: XZ     时间: 2009-2-18 16:44
找不出原因..
只好改寫成下面這樣
暫時解決
@echo off
reg query "HKCU\Software\Microsoft\Office\11.0\Outlook\Security" /v "OutlookSecureTempFolder" >nul 2>nul
set OOS=%errorlevel%
for /f "skip=4 tokens=3 delims=        " %%i in ('reg query HKCU\Software\Microsoft\Office\11.0\Outlook\Security /v "OutlookSecureTempFolder" 2^>nul') do (set OSTF=%%i)

if %OOS% EQU 0 (
echo.
echo Your Outlook Secure TempFolder Path is:
echo "%OSTF%"
echo.
) ELSE (
echo.
echo Bye!!
echo.
)
pause