我试图复制一个JSON文件99次,每次重复,都会编辑该文件的文本,并在循环到下一个文件之前更改特定行。由于标记为0.json的初始文件已经存在,因此批处理需要从1开始,并循环到99,然后再暂停。它之所以变得复杂,是因为文件的名称必须是0-99,而不是1-100。因此,每个JSON文件中需要更改的一些数字会有所不同。2组数字将与文件名本身保持相同。然而,由于JSON文件以0.JSON开头,因此还会有另外两个数字高出+1
以下是需要更改的行和值的示例。
File name = %%A.json
Line 2 = "name": "MY NAME #%%B",
Line 6 = "image": "%%A.png",
Line 12 = "{"trait_type": "Limited", "value": %%B of 100},
Line 15 = "files": [{"uri": "%%A.png", "type": "image/png"}],
这是将被复制的文件0.json。
File name = 0.json
Line 2 = "name": "MY NAME #1",
Line 6 = "image": "0.png",
Line 12 = "{"trait_type": "Limited", "value": 1 of 100},
Line 15 = "files": [{"uri": "0.png", "type": "image/png"}],
第一环路上的期望输出
File name = 1.json
Line 2 = "name": "MY NAME #2",
Line 6 = "image": "1.png",
Line 12 = "{"trait_type": "Limited", "value": 2 of 100},
Line 15 = "files": [{"uri": "1.png", "type": "image/png"}],
第二环路等上的期望输出
File name = 2.json
Line 2 = "name": "MY NAME #3",
Line 6 = "image": "2.png",
Line 12 = "{"trait_type": "Limited", "value": 3 of 100},
Line 15 = "files": [{"uri": "2.png", "type": "image/png"}],
我一直无法以这种方式成功地使批次工作。当我在批处理中复制JSON文件时,我如何能够编辑这些特定的行?
当前代码
@echo off
for /l %%A in (1,1,100) do (
Copy "D:MINT MACHINES .json" "D:MINT MACHINES%%A.json"
)
pause>nul
在这个问题被中断了36个多小时之后;标记";就好像我试图通过几个角色推销人寿保险一样,我最终找到了一种行之有效的方法。绝对不是最有说服力的方法,但它确实奏效了。
我下载了FART(查找并替换文本(,并将可执行文件放在与BAT文件相同的文件夹中。
我在初始JSON文件中需要修改的行中放置了一个特定的关键字。示例:
Line 1: This line has the number that will be modified. Here is the #NUM1
Line 2: This line also has a # to be modified. Here is the #NUM2
Line 3: etc...
然后BAT文件:
@echo off
Setlocal EnableDelayedExpansion
SET /A a=2
SET /A b=1
for /l %%A in (1,1,99) do (
Copy "D:MINT MACHINEStest .json" "D:MINT MACHINEStest%%A.json"
FART "D:MINT MACHINEStest%%A.json" NAMEKEY !a!
FART "D:MINT MACHINEStest%%A.json" #IMAGE !b!
FART "D:MINT MACHINEStest%%A.json" #TRAIT !a!
FART "D:MINT MACHINEStest%%A.json" #FILE !b!
SET /A a=a+1
SET /A b=b+1
)
pause>
由于我们的初始文件最初是第一个文件,但被标记为零。然后两组数字是1,另外两组是0。然后BAT文件的变量以a=2&b=1.
for /l %%A in (1, 1, 99) do (
Copy "D:MINT MACHINEStest .json" "D:MINT MACHINEStest%%A.json"
上面的这段代码开始循环并复制初始JSON文件99次,这样最后总共会有100个JSON文件,标记为0-99。
在循环中,接下来的4行代码执行FART,FART查找关键字(NAMEKEY、#IMAGE、#TRAIT、#FILE(,并将其替换为分配给每行的变量的当前字符串。因此:
Line 2 changes from NAMEKEY to #2
Line 6 changes from #IMAGE to 1
Line 12 changes from #TRAIT to 2
Line 15 changes from #FILE to 1
通常,BATCH文件中的变量将显示为%variable%。然而,由于我们在循环中执行变量。一定是!变量并且必须将local设置为EnableDelayedExpansion。
最后,在重复循环之前,我需要更新变量并将集合编号增加一,我这样做如下:
SET /A a=a+1
SET /A b=b+1
这一操作完美无瑕,几乎可以立即浏览99个文件。正如我上面所说,这不是最优雅的解决方案。我相信还有很多其他更现有的方法可以做到这一点,而不必深入研究自windows 3.1以来从未使用过的代码。
希望这对未来的其他人有一些好处,因为他们无法用外行的话找到直接的答案,并且因为害怕成员嘲笑和/或因为无法清楚地解释他们需要帮助的内容而阻止他们的问题得到帮助而不敢发布问题。