需要编辑文本文件。删除开始然后循环

时间:2013-08-05 15:20:37

标签: text batch-file edit

在这里完成新手所以所有的帮助感激地收到了。我希望用批处理文件编辑一个文本文件。

我有一个文本文件,只有一行。 我需要删除前240个字符 我需要删除最后82个字符 最后,介于两者之间的任何东西都需要用换行符分隔每个100个字符 谢谢 标记

3 个答案:

答案 0 :(得分:4)

试试这个(批次,没有VBS):

@ECHO OFF &SETLOCAL
SET "longstring=012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789X012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789X0123456789012345678901234567890123456789012345678901234567890123456789012345678901"
ECHO %longstring%
ECHO(
REM I need the first 240 characters deleted
SET "longstring=%longstring:~240%"
ECHO %longstring%
ECHO(
REM I need the last 82 characters deleted
SET "longstring=%longstring:~0,-82%"
ECHO %longstring%
ECHO(
REM I need each 100 characters to be separated with a line break
SET LB=^


SET "right=%longstring%"
SET "longstring="
SETLOCAL ENABLEDELAYEDEXPANSION
:loop
SET "left=%right:~0,100%"
SET "right=%right:~101%"
SET "longstring=!longstring!!left!!LB!"
IF DEFINED right GOTO :loop
ECHO(!longstring!

..输出是:

012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789X012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789X0123456789012345678901234567890123456789012345678901234567890123456789012345678901

X012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789X0123456789012345678901234567890123456789012345678901234567890123456789012345678901

X012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789X

X012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789X

答案 1 :(得分:3)

几乎任何编程语言都可以轻松解决您的问题...除了Windows批处理:(

如果您的文件长度超过8192字节,则Windows批处理几乎不可能,因为批处理变量限制为8192个字符。有一种复杂的方法使用FC / B一次有效地读取一个字节,表示为十六进制。进行计数会相对容易。但是每个十六进制代码都需要转换回字符值。除了学术兴趣之外,你不想经历所有的痛苦。

您可以使用PowerShell,VBScript或JScript轻松完成您想要的操作。

但是如果你想坚持使用批处理,那么你需要一个非标准的实用程序来帮助你。

您可以下载免费的实用程序,这将使解决方案变得微不足道。例如,Windows的sed可能会解决这个问题。

我编写了一个名为REPL.BAT的混合JScript /批处理实用程序,它在stdin上执行正则表达式搜索和替换,并将结果写入stdout。该实用程序是纯脚本,适用于从XP开始的任何Windows机器 - 无需下载exe。 REPL.BAT is available here.完整的文档嵌入在脚本中。

假设REPL.BAT位于当前目录中,或者更好,位于PATH中的某个位置,那么以下简单的批处理脚本应该可以解决问题。该脚本将要修改的文件名作为第一个也是唯一的参数。文件规范可以包括路径信息。如果文件包含空格或其他特殊字符,请务必将其括在引号中。

@echo off
type %1|repl "^.{240}(.*).{82}$" "$1"|repl ".{100}" "$&\r\n" x >"%~1.mod"
move /y "%~1.mod" %1 >nul

答案 2 :(得分:0)

我强烈建议尽可能切换到PowerShell或至少VBScript。用这些语言做你想做的事要容易得多。

的PowerShell:

$filename = 'C:\path\to\your.txt'
(Get-Content $filename | Out-String) `
    -replace '^[\s\S]{240}', '' `
    -replace '[\s\S]{82}$','' `
    -replace '([\s\S]{100})',"`$1`r`n" `
  | Set-Content $filename

的VBScript:

filename = "C:\path\to\your.txt"

Set fso = CreateObject("Scripting.FileSystemObject")
Set re  = New RegExp
re.Global = True

txt = fso.OpenTextFile(filename).ReadAll

re.Pattern = "^[\s\S]{240}"
txt = re.Replace(txt, "")
re.Pattern = "[\s\S]{82}$"
txt = re.Replace(txt, "")
re.Pattern = "([\s\S]{100})"
txt = re.Replace(txt, "$1" & vbNewLine)

fso.OpenTextFile(filename, 2).Write txt