我正在制作批处理文件创建另一个文件但我不能添加括号

时间:2016-09-20 22:10:10

标签: batch-file

我尝试使批处理文件制作另一个带有括号的批处理文件

set brackleft ="("
set brackright =")"
@(
echo @echo off
echo if exist exp.txt %brackleft%
echo    goto a
echo %brackright% else %brackleft%
echo echo Bye
echo pause
echo %brackleft%
echo pause
echo :a
echo echo Hi
echo pause
) > Test.bat

但是,当我右键单击并编辑新批处理文件时,会出现

@echo off
if exist exp.txt 
goto a
 else 
echo Bye
pause
ECHO is off.
pause
:a
echo Hi
pause

2 个答案:

答案 0 :(得分:0)

注意:

rem          ↓ this space is harmful creates %brackleft % variable instead of %brackleft%
set brackleft ="("
set brackright =")"
rem           ↑ this space is harmful as well: creates %brackright % variable
rem                                                               ↑

让我们删除那些有害的空间:

set brackleft="("
set brackright=")"

然后,echo %brackright% else %brackleft%会产生")" else "("

您需要使用^(作为^)^的下一个语法;此外,set "brackleft=^(" set "brackright=^)" 插入符也应该被转义(参见双引号的位置):

#sequence li {
   background-position: center !important;
}

答案 1 :(得分:-1)

我无法添加括号

set brackleft ="("
set brackright =")"

您创建了一个名为“brackleft”和“brackright”的变量(注意尾随空格)。

  

变量名或字符串周围的任何额外空格都不会被忽略,SET不像许多其他脚本语言那样容忍额外的空格。

来源set

注意:

  • 删除=
  • 之前的空格
  • 您还需要删除" s(否则它们将被echo修改)
  • 您还需要转义(),以便echo稍后才能使用。
  • ^^用于制作单个^转义字符。
  • 您应该使用^^^来逃避现有代码块中的()
  • 你的逻辑似乎有一个错误。 echo %brackleft%应该是echo %brackright%,否则您的括号不匹配。

所以代码变成:

set brackleft=^^^(
set brackright=^^^)

更正了批处理文件:

set brackleft=^^^(
set brackright=^^^)
@(
echo @echo off
echo if exist exp.txt %brackleft%
echo    goto a
echo %brackright% else %brackleft%
echo echo Bye
echo pause
echo %brackright%
echo pause
echo :a
echo echo Hi
echo pause
) > Test.bat

输出:

F:\test>type Test.bat
@echo off
if exist exp.txt (
   goto a
) else (
echo Bye
pause
)
pause
:a
echo Hi
pause

进一步阅读