中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [求助]請reg 搭配ERRORLEVEL使用 上一主题 | 下一主题
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『楼 主』:  [求助]請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


2009-2-5 17:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 2 楼』:  

if %%i 为空 退出
这样不行么




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-2-5 17:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 3 楼』:  



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

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

可否來個範例謝謝^^

2009-2-5 18:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 4 楼』:  

if /? 就有啊




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-2-5 18:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 5 楼』:  



  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 的環境變數。這種情況下您將會得到它的值。


2009-2-9 12:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 6 楼』:  用存在的、不存在的、禁止访问的项或值来测试。

reg query "键项" [/v "值"]
echo %errorlevel%



┌───────┐
├→学习→实践→┤
└───────┘
2009-2-9 13:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 7 楼』:  



  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
請按任意鍵繼續 . . .


2009-2-13 14:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 8 楼』:  

在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值存在時執行若數值不存在時則跳出,若數值存在須將該數值設成一變數提供後續與法使用

2009-2-16 15:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhengqian529
初级用户





积分 100
发帖 93
注册 2009-1-14
来自 湖南
状态 离线
『第 9 楼』:  

errorlevel 这个值是系统返回的,你要不自己设置一个error变量:
1. 存在时,set error=1
2. 不存在时,set error=0
然后后面紧接你要执行的操作,不一定要纠结在%errorlevel%这个系统给定的变量

2009-2-16 15:48
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (250988158)  编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 10 楼』:  



  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!!
請按任意鍵繼續 . . .


2009-2-16 17:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
XZ
初级用户





积分 144
发帖 65
注册 2008-3-20
来自 Taiwan
状态 离线
『第 11 楼』:  

找不出原因..
只好改寫成下面這樣
暫時解決
@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


2009-2-18 16:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: