中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 08:41
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]請reg 搭配ERRORLEVEL使用 查看 951 回复 10
楼 主 [求助]請reg 搭配ERRORLEVEL使用 发表于 2009-02-05 17:24 ·  中国 台湾 索尼So-Net娱乐通讯
初级用户
★★
积分 144
发帖 65
注册 2008-03-20 20:03
18年会员
UID 113522
性别 男
来自 Taiwan
状态 离线
請問 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

2 发表于 2009-02-05 17:43 ·  中国 北京 鹏博士长城宽带
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
if %%i 为空 退出
这样不行么

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
3 发表于 2009-02-05 18:07 ·  中国 台湾 索尼So-Net娱乐通讯
初级用户
★★
积分 144
发帖 65
注册 2008-03-20 20:03
18年会员
UID 113522
性别 男
来自 Taiwan
状态 离线
Originally posted by yishanju at 2009-2-5 05:43 PM:
if %%i 为空 退出
这样不行么

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

可否來個範例謝謝^^
4 发表于 2009-02-05 18:14 ·  中国 北京 鹏博士长城宽带
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
if /? 就有啊

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
5 发表于 2009-02-09 12:02 ·  中国 台湾 索尼So-Net娱乐通讯
初级用户
★★
积分 144
发帖 65
注册 2008-03-20 20:03
18年会员
UID 113522
性别 男
来自 Taiwan
状态 离线
Originally posted by yishanju at 2009-2-5 06:14 PM:
if /? 就有啊


Sir if搭配我還不太會用
說明書有看了 只是我不太清楚REG回傳的ERRORLEVEL數值有哪些!! ^^


在批次檔中執行條件處理。

IF ERRORLEVEL number command
IF string1==string2 command
IF 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 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 的環境變數。這種情況下您將會得到它的值。

6 用存在的、不存在的、禁止访问的项或值来测试。 发表于 2009-02-09 13:33 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
20年会员
UID 59307
状态 离线
reg query "键项" [/v "值"]
echo %errorlevel%
┌───────┐
├→学习→实践→┤
└───────┘
7 发表于 2009-02-13 14:47 ·  中国 台湾 索尼So-Net娱乐通讯
初级用户
★★
积分 144
发帖 65
注册 2008-03-20 20:03
18年会员
UID 113522
性别 男
来自 Taiwan
状态 离线
Originally posted by wxcute at 2009-2-9 01:33 PM:
reg query "键项"
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
請按任意鍵繼續 . . .
8 发表于 2009-02-16 15:43 ·  中国 台湾 索尼So-Net娱乐通讯
初级用户
★★
积分 144
发帖 65
注册 2008-03-20 20:03
18年会员
UID 113522
性别 男
来自 Taiwan
状态 离线
在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值存在時執行若數值不存在時則跳出,若數值存在須將該數值設成一變數提供後續與法使用
9 发表于 2009-02-16 15:48 ·  美国 华盛顿州 金 雷德蒙德 Microsoft
初级用户
★★
积分 100
发帖 93
注册 2009-01-14 15:04
17年会员
UID 136661
性别 男
来自 湖南
状态 离线
errorlevel 这个值是系统返回的,你要不自己设置一个error变量:
1. 存在时,set error=1
2. 不存在时,set error=0
然后后面紧接你要执行的操作,不一定要纠结在%errorlevel%这个系统给定的变量
10 发表于 2009-02-16 17:31 ·  中国 台湾 索尼So-Net娱乐通讯
初级用户
★★
积分 144
发帖 65
注册 2008-03-20 20:03
18年会员
UID 113522
性别 男
来自 Taiwan
状态 离线
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!!
請按任意鍵繼續 . . .
11 发表于 2009-02-18 16:44 ·  中国 台湾 索尼So-Net娱乐通讯
初级用户
★★
积分 144
发帖 65
注册 2008-03-20 20:03
18年会员
UID 113522
性别 男
来自 Taiwan
状态 离线
找不出原因..
只好改寫成下面這樣
暫時解決


@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
论坛跳转: