我正在使用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。我应该将字符串变量命名为什么?这些甚至是正确的问题吗?
感谢您的光临。
答案 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
您需要更改sourcedir
和targetdir
的设置以适合您的具体情况。
我使用了一个名为q40171884.txt
的文件,其中包含我的测试名称。
使用文件"%sourcedir%\thefilecontainingtheremainder.txt"
包含要分配给输出文件的数据正文。当然,这可能在任何地方。
基本上,请使用包含您姓名的文件名,并使用find /n /v ""
为每行添加[sequencenumber]
作为前缀。使用delims
的{{1}},将前缀分配给[]
,将其余部分(名称)分配给%%a
。
%%b
输出的第一行会报告文件名,但不会包含find
(除非你变得愚蠢并按照这种方式设计),所以[]
案件将是空的。我们跳过该行,而对于其他人,%%b
包含数字和%%a
名称。
然后创建新的输出文件"文件编号 .txt"和两个特殊的行 - 第二个附加%%b
(名称)。然后只需%%b
来回填所需文本的其余部分。