当我将某些涉及括号的命令放在括号IF
语句中时,我遇到了麻烦。
以下有两个示例:
if condition (
title Cleanup (task 1)
) else (
title Cleanup (task 2)
)
和
if condition (
set /a var2=(100 * %var%) + 50
) else (
set /a var2=100 * (%var% + 50)
)
这些都会失败,甚至可能导致脚本崩溃。我在这里尝试的可行吗?也许有某种方法可以强制按字面意思理解标题和设置命令中的括号?或者有其他符号可以完成同样的工作?
答案1
您需要^
对内括号使用转义字符:
if condition ( title Cleanup ^(task 1^) ) else ( title Cleanup ^(task 2^) )
答案2
// 编辑
在命令行中测试一下:
^s^e^t^ ^/^a ^y^=^0 && ^c^a^l^l ^e^c^h^o^\^%^y^%
你会看到所有^
完全是多余和不必要的,但它仍然有效,结果是相同的,没有转义,你也可以使用“双引号”,但要明白,如果你想使用转义,你只需要^)
,在您当前的代码中,并意识到在^(
,并不是因为它有效,所以才需要它,更多信息请参见
回答
- 同样适用:
set /a var2=(100 * %var%^) + 50
// 编辑
- 你只
""
需要set "var=(integer operator integer) operator integer"
@echo off
setlocal
set "var1=1"
if x == x (
title Cleanup (task 1^)
) else (
title Cleanup (task 2^)
)
if x == y (
title Cleanup (task 1^)
) else (
title Cleanup (task 2^)
)
echo\ var1 == %var1%
if not y == x (
set /a var2=(10 * %var1%^) + 50
) else (
set /a var2=10 * (%var1% + 50^)
)
echo\ var1 == %var1%
echo\ var2 == %var2%
if z == y (
set /a "var2=(5 * %var1%) + 50"
) else (
set /a "var2=5 * (%var1% + 50)"
)
echo\ var1 == %var1%
echo\ var2 == %var2%
endlocal
- 输出:
var1 == 1
var1 == 1
var2 == 60
var1 == 1
var2 == 255