有没有更快的方法使用 ECHO 命令将文本插入多行文档?

有没有更快的方法使用 ECHO 命令将文本插入多行文档?

我正在编写一个批处理脚本,.json如果在特定位置找不到脚本,它会创建一个脚本。如果需要创建,我还会让批处理脚本插入 JSON 的所有默认代码。我可以对要创建新脚本的原始脚本进行 1:1 复制,但我想知道是否有更快的方法可以做到这一点,而不必使用我正在使用的当前语法逐行复制代码。我通过 ECHO 命令以这种方式插入代码:

ECHO %CODELINE%>> "%JSONSCRIPT%

我想知道是否可以做些什么,以便每行不必以 开头ECHO和结尾>> "%JSONSCRIPT%。这可能吗?以下是我的脚本中的一段代码,用于要创建的其中一个 JSON 文件:

:MAKEJSON
BREAK>"Scripts\JSON1.json"
ECHO {>> "Scripts\JSON1.json"
ECHO   "list": [>> "Scripts\JSON1.json"
ECHO     {>> "Scripts\JSON1.json"
ECHO       "var": {>> "Scripts\JSON1.json"
ECHO         "showName": "Example 01",>> "Scripts\JSON1.json"
ECHO         "targetName": "TBD">> "Scripts\JSON1.json"
ECHO       },>> "Scripts\JSON1.json"
ECHO       "type": {>> "Scripts\JSON1.json"
ECHO         "showName": "Example 02",>> "Scripts\JSON1.json"
ECHO         "typeName": "[Test]",>> "Scripts\JSON1.json"
ECHO       }>> "Scripts\JSON1.json"
ECHO     },>> "Scripts\JSON1.json"
ECHO     {>> "Scripts\JSON1.json"
ECHO       "var": {>> "Scripts\JSON1.json"
ECHO         "showName": "Test 2",>> "Scripts\JSON1.json"
ECHO         "varName": "[Test2]">> "Scripts\JSON1.json"
ECHO       },>> "Scripts\JSON1.json"
ECHO       "type": {>> "Scripts\JSON1.json"
ECHO         "showName": "Sampletext",>> "Scripts\JSON1.json"
ECHO         "typeName": "TBD",>> "Scripts\JSON1.json"
ECHO       }>> "Scripts\JSON1.json"
ECHO     }>> "Scripts\JSON1.json"
ECHO   ]>> "Scripts\JSON1.json"
ECHO }>> "Scripts\JSON1.json"

答案1

你为什么不直接创建一个包含你想要的所有实际文本的“模板”文本文件,然后引用在你的脚本中?

例如,您的模板文本文件将包含:

{
  "list": [
    {
      "var": {
        "showName": "Example 01",
        "targetName": "TBD"
      },
      "type": {
        "showName": "Example 02",
        "typeName": "[Test]",
      }
    },
    {
      "var": {
        "showName": "Test 2",
        "varName": "[Test2]"
      },
      "type": {
        "showName": "Sampletext",
        "typeName": "TBD",
      }
    }
  ]
}

你的脚本只需要:

type "Scripts\template.txt" >> "Scripts\JSON1.json"

答案2

模板通常用于创建不同的内容。因此批处理还可用于将变量插入模板。

此批处理通过使用带重定向的(代码块)简化了输出:

@Echo off

For /L %%n in (1,2,10) Do Call :MAKEJSON %%n

Goto :Eof
:MAKEJSON
Set /A n=100 + %1,m=101 +%1,T = %1 + 1
Set  "JSONSCRIPT=Script\JSON%1.json"
( Echo={
  Echo=  "list": [
  Echo=    {
  Echo=      "var": {
  Echo=        "showName": "Example %n:~-2%",
  Echo=        "targetName": "TBD"
  Echo=      },
  Echo=      "type": {
  Echo=        "showName": "Example %m:~-2%",
  Echo=        "typeName": "[Test]",
  Echo=      }
  Echo=    },
  Echo=    {
  Echo=      "var": {
  Echo=        "showName": "Test %T%",
  Echo=        "varName": "[Test2]"
  Echo=      },
  Echo=      "type": {
  Echo=        "showName": "Sampletext",
  Echo=        "typeName": "TBD",
  Echo=      }
  Echo=    }
  Echo=  ]
  Echo=}
) >"%JSONSCRIPT%"

并在一次运行中创建多个文件:

│   MakeJson.cmd
└───script
        JSON1.json
        JSON3.json
        JSON5.json
        JSON7.json
        JSON9.json

内容如下:

> type script\JSON5.json
{
  "list": [
    {
      "var": {
        "showName": "Example 05",
        "targetName": "TBD"
      },
      "type": {
        "showName": "Example 06",
        "typeName": "[Test]",
      }
    },
    {
      "var": {
        "showName": "Test 6",
        "varName": "[Test2]"
      },
      "type": {
        "showName": "Sampletext",
        "typeName": "TBD",
      }
    }
  ]
}

答案3

经过一番挖掘,我发现Stack Overflow 上有一个有答案的问题(经过重力我修改了它,使它按照我想要的方式工作。ECHO仍然必须在要插入到基于文本的文档/脚本中的每一行的开头声明,才能使其工作。代码块以单个左括号开始,位于它自己的行上,以右括号结束,位于新行上,后跟> "%JSONFILE%"。这是我用来实现此目的的代码块:

:MAKEJSON
BREAK>"Scripts\JSON1.json"
(
ECHO {
ECHO   "list": [
ECHO     {
ECHO       "var": {
ECHO         "showName": "Example 01",
ECHO         "targetName": "TBD"
ECHO       },
ECHO       "type": {
ECHO         "showName": "Example 02",
ECHO         "typeName": "[Test]",
ECHO       }
ECHO     },
ECHO     {
ECHO       "var": {
ECHO         "showName": "Test 2",
ECHO         "varName": "[Test2]"
ECHO       },
ECHO       "type": {
ECHO         "showName": "Sampletext",
ECHO         "typeName": "TBD",
ECHO       }
ECHO     }
ECHO   ]
ECHO }
) > "%JSONFILE%"

相关内容