使用批处理文件从列表创建多个文本文件

时间:2016-05-06 18:22:28

标签: windows batch-file

我有一个名为“letters.txt”的文件中的字母列表和一个名为“LetterPerSample.txt”的文件中每个字母的出现次数列表,这两个文件都是排列的,所以第一行的letters.txt有一个“a”第二个有“b”......等,同样对于SamplePerLetter.txt,第一行的最大数量为“a”,第二行的最大数量为“b”,因此,我想创建一个列表像这样的文件a_1,a_2,..... a_max.txt,其中max是上面列出的数字,生成的每个文件都有自己写的字母。所以a_1.txt里面写着“a”,b_5.txt写有“b”等等

到目前为止我所做的是:

@echo off
setlocal enableDelayedExpansion


for /f "tokens=*" %%a in (letters.txt) do (
    set letter=%%a
    for /f "tokens=*" %%b in (SamplePerLetter.txt) do (
    set num=%%b
    for/L %%g IN (1,1,!num!) do (
        set index=%%g
        echo !letter!>letter_labels/!letter!/!letter!!index!.lab
    )
  )
)

输出样本

a_1.txt
a_2.txt
...
a_10.txt
b_1.txt
b_2.txt
...
b_10.txt

但是a和b在文件中没有相同的出现次数LetterPerSample.txt a有10而b有5,所以我的代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

你的问题是,simultanioulsly读取两个文件。这是一个诀窍:

@echo off
setlocal enabledelayedexpansion
<letterpersample.txt (
  for /f %%a in (letters.txt) do (
    set /p num=
    for /l %%i in (1,1,!num!) do (
      echo %%a>letter_labels\%%a\%%a%%i.lab
    )
  )
)

for循环(%%a)从letters.txt读取另一行。 set /p从STDIN读取一行(从letterspersample.txt重定向),因此如果for从一个文件中读取第5行,set /p将从另一个文件中读取第5行。

(PS:我怀疑,你的echo逻辑是好的。好像很奇怪)

答案 1 :(得分:0)

此方法不要求activation-1.1.jar ant-1.5.jar aopalliance-1.0.jar bcprov-jdk15-133.jar commons-attributes-api-2.1.jar commons-beanutils-1.7.0.jar commons-codec-1.3.jar commons-discovery-0.2.jar commons-httpclient-3.0.jar commons-logging-1.1.3.jar javax.servlet-api-3.1.0.jar javax.servlet.jsp-api-2.3.1.jar jaxb-api-2.0.jar jaxb-impl-2.0.1.jar jaxb-xjc-2.0.1.jar jaxen-1.1-beta-9.jar jaxws-api-2.0.jar jdom-1.0.jar jmock-1.0.1.jar jsr173_api-1.0.jar jstl-1.2.jar junit-3.8.1.jar mail-1.4.jar opensaml-1.0.1.jar qdox-1.5.jar saaj-api-1.3.jar saaj-impl-1.3.jar spring-aop-4.0.6.RELEASE.jar spring-beans-4.0.6.RELEASE.jar spring-context-4.0.6.RELEASE.jar spring-core-4.0.6.RELEASE.jar spring-expression-4.0.6.RELEASE.jar spring-web-4.0.6.RELEASE.jar spring-webmvc-4.0.6.RELEASE.jar stax-api-1.0.1.jar stax-utils-20040917.jar wsdl4j-1.6.1.jar wss4j-1.5.1.jar wstx-asl-3.2.0.jar xbean-2.2.0.jar xbean-spring-2.8.jar xercesImpl-2.7.1.jar xfire-aegis-1.2.6.jar xfire-all-1.2.6.jar xfire-annotations-1.2.6.jar xfire-core-1.2.6.jar xfire-generator-1.2.6.jar xfire-java5-1.2.6.jar xfire-jaxb2-1.2.6.jar xfire-jaxws-1.2.6.jar xfire-jsr181-api-1.0-M1.jar xfire-spring-1.2.6.jar xfire-ws-security-1.2.6.jar xfire-xmlbeans-1.2.6.jar xml-apis-1.0.b2.jar xmlParserAPIs-2.6.2.jar XmlSchema-1.1.jar xmlsec-1.3.0.jar 文件中的字母按顺序排列,因此您可以在此类文件中只插入所需的字母:

letters.txt

您可以在this post的批处理文件中查看数组的管理。

如果@echo off setlocal EnableDelayedExpansion rem Load the number of occurrences of each letter from "LetterPerSample.txt" file set "letters=abcdefghijklmnopqrstuvwxyz" set "i=0" for /F %%b in (LetterPerSample.txt) do ( for %%i in (!i!) do set "number[!letters:~%%i,1!]=%%b" set /A i+=1 ) rem Process the letters in "letters.txt" file (in any order) for /F %%a in (letters.txt) do ( set "letter=%%a" set "num=!number[%%a]!" for /L %%g in (1,1,!num!) do ( set "index=%%g" echo !letter!>letter_labels\!letter!\!letter!_!index!.lab ) ) 文件的始终所有字母,从letters.txta,则此文件包含可以消除的冗余信息:

z