我使用for循环来创建带有预定义头的文本文件,但我想附加一个唯一的字符串(alice、bob等)。在每个文件的第2行上,从预定的列表。
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“(即。在“file2.txt”和"chris“中进行第三次迭代,并继续处理30个文件。
我是否以某种方式循环%a%部件以使每次增加一个。我应该如何命名字符串变量才能做到这一点?这些都是正确的问题吗?
谢谢你找我。
发布于 2016-12-10 04:24:00
似乎您要解决的问题是能够在一个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循环可以迭代它们。setlocal enabledelayedexpansion)和!x!的语法,而不是%x%,这样批处理每次都通过循环解析变量x,而不是第一次(而且只有一次)通过循环来解析变量x,这样每次都能得到正确的增量值。我希望这能帮上忙。
发布于 2016-12-10 04:42:14
@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 of [],将前缀分配给%%a,将行的其余部分(名称)分配给%%b。
find的第一行输出将报告文件名,但不包含[] (除非您变得愚蠢并以这种方式设计它),所以在这种情况下%%b将为空。我们跳过这一行,对于其他的,%%a包含数字,%%b包含名称。
然后创建新的输出文件"filenumber.txt“和两行--第二行附加了%%b (名称)。然后,通过简单的type对所需文本的其余部分进行反编译。
https://stackoverflow.com/questions/41071884
复制相似问题