我正在编写一个批处理脚本,.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%"