【问题标题】:Split a file based on根据拆分文件
【发布时间】:2015-11-04 10:51:12
【问题描述】:

我 大家好,

我需要根据文件中匹配的变量内容拆分文件。 仅当以 :25: 开头的行与 split 参数之后的行不同时,我才需要在 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

【问题讨论】:

  • 带 :25: 的行总是第一个 低于 split 参数?
  • 你好阿西尼。不, :25: 并不总是低于 split 参数的第一个。这就是为什么拆分应该发生在“///”而不是“:25:”上的原因。
  • 您应该在示例中的///:25:... 行之间插入一行在文中仔细解释这一点!

标签: windows batch-file text split


【解决方案1】:

试试这个:

@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 替换为正确的文件/路径即可。

【讨论】:

  • 你好 MichaelS,谢谢!但是我怎样才能让脚本在 "///" 而不是 ":25:" 上拆分文件?因为 :25: 并不总是“///”下面的第一行,并且您的脚本正在 :25 处剪切文件:谢谢!
  • @Chris 我的代码没有在 :25: 上拆分,而是在 /// 上拆分。如果 :25: 还没有找到,它会将所有内容保存在一个临时文件中。一旦我们找到 :25: ,它就会将文件重命名为 :25: 之后的字符串。在 /// 它开始再次写入一个新的临时文件。以此类推。
【解决方案2】:
@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多