If statement 批处理文件:如果%variable%(命令)
我想使用我的%variable%来管理IF中的条件子句。。然后。。批处理文件中的其他文件。 如下所示: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
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
为了触发子例程调用,我已经强制变量名称与您使用的条件相匹配。根据需要进行更改以证明您的概念
不要担心英语不完美。我相信我在你的语言中不会做得很好!谢谢,我已经更正了我的代码,并添加了我的问题:)对不起,我的英语不好!