繁体   English   中英

批处理文件:如果%variable%(命令)

[英]batch file: if %variable% (commands)

我想使用我的%variable%在批处理文件中管理IF..THEN..ELSE中的条件子句。 类似于以下内容:

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

如果我在cmd控制台上写:

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

有用!

我将在/ f cicle中使用它:这是我的伪代码这是我要纠正的伪代码

(
 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

- 编辑 -

我如何使用变量!cond! 决定是否执行对CSG_sub_fs的调用?

call if !cond! call:CSG_sub_fs !parm!

不起作用,因为它返回:“找不到指定的批次标签-IF”

如果我用

if !cond! call:CSG_sub_fs !parm!

它会说:“电话:CSG_sub_fs意外”

好吧-似乎没有问题,所以回答起来并不容易。

你有一个问题

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

因为^无法逃脱% - %逃脱% -请使用%%COMPUTERNAME%%...

(你应该已经能够仅仅通过检查这TYPE ING“%temp%\\ CSG_fs.tmp”

下一个问题是

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

可以处理%temp%\\CSG_fs.tmp文件,前提是%temp%\\CSG_fs.tmp包含空格,分号或逗号。 如果它包含这些默认分隔符中的任何一个或具有特殊含义的某些其他字符,则必须将文件名括在双引号"%temp%\\CSG_fs.tmp"并使用usebackq选项。

你试图使用usebackqDELIMS必须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 

我已强制变量名匹配您用来触发子例程调用的条件。 根据需要证明您的概念进行更改。

并且不用担心英语不完美。 我敢肯定,您的语言会不会很好!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM