批处理文件:在括号内使用括号?

批处理文件:在括号内使用括号?

当我将某些涉及括号的命令放在括号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

相关内容