0

完整的新手在这里,所以所有的帮助都感激不尽。我希望用批处理文件编辑文本文件。

我有一个全是一行的文本文件。我需要删除前 240 个字符 我需要删除最后 82 个字符 最后,我需要每 100 个字符之间用换行符分隔 谢谢马克

4

3 回答 3

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
于 2013-08-05T20:43:41.863 回答
3

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

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

您可以使用 PowerShell、VBScript 或 JScript 轻松地做您想做的事。

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

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

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

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

@echo off
type %1|repl "^.{240}(.*).{82}$" "$1"|repl ".{100}" "$&\r\n" x >"%~1.mod"
move /y "%~1.mod" %1 >nul
于 2013-08-05T16:07:35.467 回答
0

如果可能的话,我强烈建议切换到 PowerShell 或至少 VBScript。用这些语言做你想做的事情会容易得多。

电源外壳:

$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

VB脚本:

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
于 2013-08-05T17:51:42.633 回答