2013-04-04 48 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