2015-11-04 83 views
0

我 大家好,文件分割基于

我需要根据文件中匹配变量的内容拆分文件。 只有在以25开头的行之前和刚刚在split参数之后的行不同时,我需要在拆分参数(此处为“///”)上拆分文件。 然后应使用:25:标记的表达式命名文件。 我需要使用.cmd命令来做到这一点... 我已经厌倦了令牌,但一直不成功。 有人可以帮我解决这个问题吗?

例如,下面的文件的初始文件:

:01:BLABLA 
:25:123456 
:71:BLABLABLA1 
:86:BLABLABLA2 
:71:BLABLABLA3 
:86:BLABLABLA4 
/// 
:25:123456 
:71:BLABLABLA5 
:86:BLABLABLA6 
:71:BLABLABLA7 
:86:BLABLABLA8 
/// 
:25:123457 
:71:BLABLABLA0 
:86:BLABLABLA9 

应在两个文件进行分割:

123456.TXT

:01:BLABLA 
:25:123456 
:71:BLABLABLA1 
:86:BLABLABLA2 
:71:BLABLABLA3 
:86:BLABLABLA4 
/// 
:25:123456 
:71:BLABLABLA5 
:86:BLABLABLA6 
:71:BLABLABLA7 
:86:BLABLABLA8 

123457.TXT

:25:123457 
:71:BLABLABLA0 
:86:BLABLABLA9 
+0

带有:25的行总是第一个_below_分割参数? – Aacini

+0

嗨Aacini。不,25:并不总是低于分割参数的第一个。这就是拆分应该发生在“///”而不是“:25:”上的原因。 – Chris

+0

你应该在你的例子中在'///'和':25:...'之间插入一行,或者在文本中仔细解释这一点! – Aacini

回答

0

试试这个:

@echo off 
setlocal EnableDelayedExpansion 
set inFile=inputTextFile.txt 
set outFile=tempFile.txt 
for /F "tokens=*" %%L in (%inFile%) do (
    set currentline=%%L 
    if "%%L"=="///" (
     set outFile=tempFile.txt 
    ) 
    if "!currentLine:~0,4!"==":25:" (
     set outFile=!currentLine:~4!.txt 
     if exist tempFile.txt (
      if exist !outFile! (
       copy !outFile!+tempFile.txt !outFile! 
       del tempFile.txt 
      ) else ren tempFile.txt !outFile! 
     ) 
    ) 
    echo %%L>>!outFile! 
) 

只是正确的文件/路径替换inputTextFile.txt

+0

嗨MichaelS, 谢谢!但是,我怎么能让脚本在“///”而不是“:25:”上分割文件呢?因为:25:并不总是在“///”下面的第一行,并且您的脚本正在剪切文件:25: 谢谢! – Chris

+0

@Chris我的代码没有分割:25:但在///上。如果:25:尚未找到,它将所有内容保存在临时文件中。只要我们发现:25:它将文件重命名为后面的字符串:25 :.在///上它开始再次写入一个新的临时文件。等等。 – MichaelS

0
@echo off 
setlocal EnableDelayedExpansion 

del temp.tmp *.out 2> NUL 

set "file=not25tag" 
for /F "tokens=1* delims=:" %%a in (input.txt) do (
    if "%%a" equ "25" set "file=%%b" 
    if "%%a" neq "///" (
     echo :%%a:%%b>> temp.tmp 
    ) else (
     if not exist "!file!.out" (
     ren temp.tmp "!file!.out" 
    ) else (
     echo ///>> "!file!.out" 
     type temp.tmp >> "!file!.out" 
     del temp.tmp 
    ) 
     set "file=not25tag" 
    ) 
) 

if not exist "!file!.out" (
    ren temp.tmp "!file!.out" 
) else (
    echo ///>> "!file!.out" 
    type temp.tmp >> "!file!.out" 
    del temp.tmp 
) 

ren *.out *.txt