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

If statement 批处理文件:如果%variable%(命令),if-statement,batch-file,environment-variables,conditional-statements,If Statement,Batch File,Environment Variables,Conditional Statements,我想使用我的%variable%来管理IF中的条件子句。。然后。。批处理文件中的其他文件。 如下所示: 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循环中使用它: 这是我的伪代码这是我要更正的伪代码 ( re

我想使用我的%variable%来管理IF中的条件子句。。然后。。批处理文件中的其他文件。 如下所示:

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循环中使用它: 这是我的伪代码这是我要更正的伪代码

(
 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 !cond! call:CSG_sub_fs !parm!

它会说:“呼叫:CSG_sub_fs not expected”

嗯,似乎没有问题,所以回答起来并不那么容易

你有问题吗

echo "^%COMPUTERNAME^% EQU [x];[some parameters1]"
因为
^
不转义
%
-
%
转义
%
-使用
%%COMPUTERNAME%%…

(您应该能够通过键入“%temp%\CSG\u fs.tmp”来检查这一点)

下一个问题是

for /f "tokens=1-2* delims=; usebackq" %%a in (%temp%\CSG_fs.tmp) do (
可以处理文件
%temp%\CSG\u fs.tmp
,前提是
%temp%\CSG\u fs.tmp
不包含空格、分号或逗号。如果它包含任何这些Deafolt分隔符或具有特殊含义的某些其他字符,则必须将文件名括在双引号中
%temp%\CSG\u fs.tmp“
并使用
usebackq
选项

您试图使用
usebackq
,但
DELIMS
必须是
最后一个
选项(如果使用)。您的代码将设置“
”、“
”、“
u
”、“
s
”、“
e
”、“
b
”、“
a
”、“
c
”、“
k
”和“
”作为分隔符

除此之外,如果你解释一下你打算实现什么,我们就能够设计出合适的代码


试试这个:

@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
为了触发子例程调用,我已经强制变量名称与您使用的条件相匹配。根据需要进行更改以证明您的概念


不要担心英语不完美。我相信我在你的语言中不会做得很好!

谢谢,我已经更正了我的代码,并添加了我的问题:)对不起,我的英语不好!