批量将特定字符串附加到预定义列表中的特定.txt文件?

时间:2016-12-10 03:33:05

标签: batch-file

我正在使用for循环来创建带有预定义标题的文本文件,但我想在第二行为预定列表中的每个文件追加一个唯一的字符串(alice,bob等)。

Set a=alice
Set b=bob
Set c=chris

Rem ...etc. (I have about 30 files with a unique name to go in row 2 of each file)

For /l %%x in (1, 1 , 30) do (echo headerRow1 > file%%x.txt & echo %a% > file%%x.txt)

我不明白如何自动插入" bob"对于第二次迭代(即In" file2.txt")和" chris"第三次迭代,继续30个文件。

我是否以某种方式循环%a%部分每次增加1。我应该将字符串变量命名为什么?这些甚至是正确的问题吗?

感谢您的光临。

2 个答案:

答案 0 :(得分:0)

您尝试解决的问题似乎是能够在一个for循环中在两个列表之间进行迭代,而for循环只能迭代通过一次设置一个。问题更难,因为数组和列表并不真正存在于批处理中作为一等公民。

有多种方法可以解决这个问题,但更简单的方法是遍历名称,并在每次循环时递增计数器。 (这可能比for /l循环更容易并递增名称列表。)

这是一个例子。

@echo off & setlocal enabledelayedexpansion
set names=alice bob chris
set x=1
for %%a in (%names%) do (
    >file!x!.txt (
        echo headerRow
        echo %%a
    )
    set /a x+=1
)

注意:

  • 将所有名称设置在一行中,for循环可以遍历它们。

  • 在开始时设置计数器(x),然后在循环结束时递增它。

  • 我正在使用延迟展开(setlocal enabledelayedexpansion)和!x!而不是%x%的语法,以便每次批量处理变量x循环,而不是第一次经过(并且只有一次),以便每次都获得正确的增量值。

我希望有所帮助。

答案 1 :(得分:0)

@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "targetdir=U:\destdir"
SET "filename1=%sourcedir%\q40171884.txt"
SET "headerrow=This is your header"
SET "line2=This is line two for "
FOR /f "tokens=1*delims=[]" %%a IN ('find /n /v "" "%filename1%"') DO IF "%%b" neq "" (
>"%targetdir%\file%%a.txt" (
 ECHO(%headerrow%
 ECHO(%line2%%%b
 TYPE "%sourcedir%\thefilecontainingtheremainder.txt"
)
)

GOTO :EOF

您需要更改sourcedirtargetdir的设置以适合您的具体情况。

我使用了一个名为q40171884.txt的文件,其中包含我的测试名称。

使用文件"%sourcedir%\thefilecontainingtheremainder.txt"包含要分配给输出文件的数据正文。当然,这可能在任何地方。

基本上,请使用包含您姓名的文件名,并使用find /n /v ""为每行添加[sequencenumber]作为前缀。使用delims的{​​{1}},将前缀分配给[],将其余部分(名称)分配给%%a

%%b输出的第一行会报告文件名,但不会包含find(除非你变得愚蠢并按照这种方式设计),所以[]案件将是空的。我们跳过该行,而对于其他人,%%b包含数字和%%a名称。

然后创建新的输出文件"文件编号 .txt"和两个特殊的行 - 第二个附加%%b(名称)。然后只需%%b来回填所需文本的其余部分。