拆分文本文件时应对for循环批处理文件问题

愤怒的人

下午好!

长期的读者,第一次的海报!我一直很开心尝试修改工作批处理文件以解决可变性。情况是,我有一个可变大小的文本文档,通常可以将其分成252行。下面的代码像冠军一样工作:

@echo off & setlocal EnableDelayedExpansion

set param=%*
if not defined param (
  echo.
  echo.  Usage: batchsplit [device:][pathname]filename
  goto :EOF
)
set param=%param:"=%
if not exist "%param%" (
  echo.
  echo. File "%param%" not found
  goto :EOF
)
for %%j in ("%param%") do (
  set name=%%~dpnj
  set ext=%%~xj
)
for /F %%j in ('type "%param%" ^| find /V /C ""') do set Full=%%j
set /A Split=%Full%/252
for /L %%G in (1,1,%Split%) do type nul > "%name%_%%G%.new"
set X=1
set N=1
set Q=1
set limit = 252
for /F "tokens=1* delims=]" %%j in ('type "%param%" ^| find /V /N ""') do (
  set /A N+=1
  set /A Q+=1
  echo.%%k>> "%name%_!X!%.new"
  if !Q! gtr 252 (
     set /A X+=1
     set /A Q=1
  ) else if !N! gtr Full (goto theend
  )
)
:theend
echo split into %split% files with 252 lines each
rem pause

但是,文本的格式进行了一些更改,现在它可以是完全可变的,而不是由每个拆分文件组成的四页,每行63行。唯一的常量是该最后一行,它位于63行页面的剩余空间之前:

 ON THIS FORM IS COMPLETE AND CORRECT AS NOTED:___________________

请注意,前面有一个空格,还有多个空格,冒号和下划线字符。作为我的主食,我认为我可以在if循环中插入一个if-then语句,以触发该批处理拆分到下一页。但是,我现在可能会更远。这是我一直在用的代码:

rem @echo off & setlocal EnableDelayedExpansion
setlocal EnableDelayedExpansion

set param=%*
if not defined param (
  echo.
  echo.  Usage: textsplit [device:][pathname]filename
  goto :EOF
)
set param=%param:"=%
if not exist "%param%" (
  echo.
  echo. File "%param%" not found
  goto :EOF
)
for %%j in ("%param%") do (
  set Name=%%~dpnj
  set ext=%%~xj
)
for /F %%j in ('type "%param%" ^| find /V /C ""') do set Full=%%j
set stopvar= ON THIS FORM IS COMPLETE AND CORRECT AS NOTED:___________________
set Split=1
echo %stopvar%
set X=1
type nul > "%name%_!X!%.new"
set N=1
set Q=1
set S=0
set L=63
for /F "tokens=1* delims=]" %%j in ('type "%param%" ^| find /V /N ""') do (
  set /A N+=1
  echo %N%
  set /A Q+=1
  echo %Q%
  echo.%%k>> "%name%_!X!%.new"
  if ["%%k%" == "!stopvar!"] (
     set /A S+=1
     )

  if !Q! gtr !L! (
     if !S! == 1 (
    set /A X+=1
        set /A Q=1
type nul > "%name%_!X!%.new"
set /A Split+=1
set S=0
     ) 
        else set /A L+=63
        else if !N! gtr Full goto theend

)
:theend
echo Split into %split% files!
pause

前提是每63行检查一次停止变量(S)。如果关闭(0),则该批处理将继续写入另外63行(一页)。如果stopvar与for循环正在读取的行匹配,则S变为1。当程序再次检查时,它将创建一个新文件并开始写入该新文件。现在,基于关闭@echo的挂断是在for循环中。见下文:

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>rrtextsplit texttest.txt

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>rem @echo off & setlocal Enabl
eDelayedExpansion

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>setlocal EnableDelayedExpansio
n

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>set param=texttest.txt

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>if not defined param (
echo.
 echo.  Usage: rrtextsplit [device:][pathname]filename
 goto :EOF
)

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>set param=texttest.txt

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>if not exist "texttest.txt" (
echo.
 echo. File "texttest.txt" not found
 goto :EOF
)

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>for %j in ("texttest.txt") do
(
set Name=%~dpnj
 set ext=%~xj
)

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>(
set Name=C:\Users\theangryasiancp\Desktop\TEXT_Split_Test\texttest
 set ext=.txt
)

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>for /F %j in ('type "texttest.
txt" | find /V /C ""') do set Full=%j

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>set Full=567

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>set stopvar= ON THIS FORM IS C
OMPLETE AND CORRECT AS NOTED:___________________

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>set Split=1

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>echo  ON THIS FORM IS COMPLETE
 AND CORRECT AS NOTED:___________________
 ON THIS FORM IS COMPLETE AND CORRECT AS NOTED:___________________

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>set X=1

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>type nul  1>"C:\Users\theangry
asiancp\Desktop\RRRR_Split_Test\texttest_!X!.new"

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>set N=1

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>set Q=1

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>set S=0

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>set L=63

C:\Users\theangryasiancp\Desktop\TEXT_Split_Test>

你觉得呢?你有没有什么想法?批处理哪里出问题了?我希望我可以使用其他方法,但由于公司内部原因,我不能。谢谢你的帮助!

oo
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "name=q23396663"
SET "ext=.txt"
SET /a pagelength=10
SET "targetstring= ON THIS FORM IS COMPLETE AND CORRECT AS NOTED:___________________"
SET /a filenum=0
SET /a linecount=pagelength + 1
FOR /f "tokens=1*delims=]" %%a IN (
 'find /v /n "" "%name%%ext%"') DO (
 IF !linecount! GEQ %pagelength% (
  SET /a linecount=0
  SET /a filenum+=1
 )
 >>U:\%name%_!filenum!.new ECHO(%%b
 IF "%%b"=="%targetstring%" SET /a linecount=pagelength
 SET /a linecount+=1
)

GOTO :EOF

为了进行测试,我设置了一个q23396663.txt包含触发数据的文件我已经保留了U:\适合我的目标目录,页面长度为10,这使我的测试更加容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用批处理文件编辑文本文件

来自分类Dev

使用批处理文件编辑文本文件

来自分类Dev

批处理文件以从文本文件读取行

来自分类Dev

用读取文本文件的for循环替换多行批处理文件

来自分类Dev

批处理文件将文本文件的行设置为循环中的单个变量

来自分类Dev

循环遍历文本文件并插入带有批处理文件的行

来自分类Dev

解析文本文件和修剪空间-批处理文件的问题

来自分类Dev

使用带运算符的批处理拆分文本文件

来自分类Dev

如何在给定的批处理文件中放置循环以生成输出文本文件

来自分类Dev

逐行循环遍历文本文件内容并使用批处理文件对每一行进行操作

来自分类Dev

ffmpeg concat批处理循环与文本文件

来自分类Dev

批量拆分文本文件

来自分类Dev

搜索文本文件,并在使用批处理文件找到特定字符串时将其附加

来自分类Dev

批处理文件:比较 2 个文本文件并更新文本文件中的特定行

来自分类Dev

如何缩短文件路径输出到批处理文件中的文本文件

来自分类Dev

批处理文件文件夹和文本文件的创建

来自分类Dev

使用文本文件重命名文件夹中的批处理文件

来自分类Dev

批处理文件将缺少的文件输出到文本文件

来自分类Dev

如何使用批处理文件有选择地删除文本文件中的文本?

来自分类常见问题

如何使用批处理文件写入文本文件?

来自分类Dev

Windows批处理文件从文本文件中提取环境变量

来自分类Dev

将文本文件中的特定行读取到批处理文件中的变量

来自分类Dev

批处理文件不将变量写入文本文件

来自分类Dev

批处理文件-将文本文件的内容复制到剪贴板

来自分类Dev

批处理文件可从多个位置删除特定的文本文件

来自分类Dev

如何使用批处理文件附加文本文件

来自分类Dev

如何从批处理文件的文本文件的行中删除多余的逗号?

来自分类Dev

如何创建从批处理文件复制ping信息的文本文件?

来自分类Dev

PowerShell:运行批处理文件并将输出写入文本文件

Related 相关文章

  1. 1

    使用批处理文件编辑文本文件

  2. 2

    使用批处理文件编辑文本文件

  3. 3

    批处理文件以从文本文件读取行

  4. 4

    用读取文本文件的for循环替换多行批处理文件

  5. 5

    批处理文件将文本文件的行设置为循环中的单个变量

  6. 6

    循环遍历文本文件并插入带有批处理文件的行

  7. 7

    解析文本文件和修剪空间-批处理文件的问题

  8. 8

    使用带运算符的批处理拆分文本文件

  9. 9

    如何在给定的批处理文件中放置循环以生成输出文本文件

  10. 10

    逐行循环遍历文本文件内容并使用批处理文件对每一行进行操作

  11. 11

    ffmpeg concat批处理循环与文本文件

  12. 12

    批量拆分文本文件

  13. 13

    搜索文本文件,并在使用批处理文件找到特定字符串时将其附加

  14. 14

    批处理文件:比较 2 个文本文件并更新文本文件中的特定行

  15. 15

    如何缩短文件路径输出到批处理文件中的文本文件

  16. 16

    批处理文件文件夹和文本文件的创建

  17. 17

    使用文本文件重命名文件夹中的批处理文件

  18. 18

    批处理文件将缺少的文件输出到文本文件

  19. 19

    如何使用批处理文件有选择地删除文本文件中的文本?

  20. 20

    如何使用批处理文件写入文本文件?

  21. 21

    Windows批处理文件从文本文件中提取环境变量

  22. 22

    将文本文件中的特定行读取到批处理文件中的变量

  23. 23

    批处理文件不将变量写入文本文件

  24. 24

    批处理文件-将文本文件的内容复制到剪贴板

  25. 25

    批处理文件可从多个位置删除特定的文本文件

  26. 26

    如何使用批处理文件附加文本文件

  27. 27

    如何从批处理文件的文本文件的行中删除多余的逗号?

  28. 28

    如何创建从批处理文件复制ping信息的文本文件?

  29. 29

    PowerShell:运行批处理文件并将输出写入文本文件

热门标签

归档