2013-04-04 78 views
0

我想用我的%變量%來管理批處理文件中的IF .. THEN .. ELSE中的條件子句。 類似以下內容:批處理文件:if%variable%(commands)

set variable=%%homedrive%% EQU C: 
if %variable% (
    echo test ok 
    ) else (
    echo test fail 
    ) 

如果我寫了一個cmd控制檯上:

set test=1 equ 1 
if %test% echo OK 

它的作品!

我就用它在FOR/F cicle: 這是我的僞codethis是我的僞代碼來糾正

(
rem echo "%systemdrive%;;" 
echo "%%COMPUTERNAME%% EQU [x];[some parameters1]" 
echo "%%USERNAME%% NEQ [y];[some parameters2]" 
echo "%%LOGONSERVER%% EQU [z];[some parameters3]" 
[..] 
) > "%temp%\CSG_fs.tmp" 
[..] 
for /f "usebackq tokens=1-2* delims=;" %%a in ("%temp%\CSG_fs.tmp") do (
    set cond=%%a& set cond=!cond:~1! 
    set parm=%%b& set parm=!parm:~0,-1! 
    echo - cicle: "!cond!" --^> "!parm!" 
    call if !cond! call:CSG_sub_fs !parm! 
    echo - done 
    ) 
goto:eof 
:CSG_sub_fs 
[..] 
goto:eof 

- 編輯 -

我如何使用變量!條件!決定是否執行對CSG_sub_fs的調用?

call if !cond! call:CSG_sub_fs !parm! 

不起作用,因爲它返回: 「無法找到指定的批次標籤 - IF」

,如果我使用

if !cond! call:CSG_sub_fs !parm! 

它會說:「電話:預計不會CSG_sub_fs 「

回答

0

好吧 - 這似乎沒有問題,所以答案並不那麼容易。

您有

echo "^%COMPUTERNAME^% EQU [x];[some parameters1]" 

因爲^問題不逃避% - %逃脫% - 使用%%COMPUTERNAME%%...

(你應該已經能夠檢查這只是TYPE ing「的%TEMP% \ CSG_fs.tmp「

Next problem is

for /f "tokens=1-2* delims=; usebackq" %%a in (%temp%\CSG_fs.tmp) do (

可處理文件%temp%\CSG_fs.tmp提供%temp%\CSG_fs.tmp不包含空格,分號或逗號。如果它包含任何這些deafult分隔符或具有特殊含義的某些其他字符,則必須將文件名放在雙引號"%temp%\CSG_fs.tmp"中,並使用usebackq選項。

您試圖使用usebackq,但如果使用DELIMS選項,則必須使用LAST選項。您的代碼將設置 「;」, 「」, 「u」, 「s」, 「e」, 「b」, 「a」, 「c」, 「k 」和「 q」 作爲分隔符。

除此之外,也許如果你解釋你打算實現什麼,我們將能夠設計出適當的代碼。


試試這個:

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
CLS 

REM I'm setting these variables for testing. 
REM That isn't ususally a good idea but the SETLOCAL 
REM will ensure they are restored on exit 

SET computername=[x] 
SET logonserver=[z] 


(
rem echo "%systemdrive%;;" 
echo "%%COMPUTERNAME%% EQU [x];[some parameters1]" 
echo "%%USERNAME%% NEQ [y];[some parameters2]" 
echo "%%LOGONSERVER%% EQU [z];[some parameters3]" 
) > "%temp%\CSG_fs.tmp" 
for /f "usebackqtokens=1-2* delims=;" %%a in ("%temp%\CSG_fs.tmp") do (
    set cond=%%a& set "cond=IF !cond:~1! CALL :csg_sub_fs " 
    set parm=%%b& set parm=!parm:~0,-1! 
    CALL :varcmd "!cond!" "!parm!" 
    ) 
GOTO :eof 

:varcmd 
%~1 %~2 
GOTO :eof 

:csg_sub_fs 
ECHO parameters supplied to csg_sub_fs were: %* 
GOTO :eof 

我強迫variablenames相匹配才能觸發子程序調用你使用的條件。隨着您需要證明您的概念而改變。

不要擔心不完美的英語。我相信我不會用你的語言做得很好!

+0

謝謝,我糾正了我的代碼,我添加了我的問題:)抱歉我的英語不好! – CSG 2013-04-04 13:15:35