在这里完成新手所以所有的帮助感激地收到了。我希望用批处理文件编辑一个文本文件。
我有一个文本文件,只有一行。 我需要删除前240个字符 我需要删除最后82个字符 最后,介于两者之间的任何东西都需要用换行符分隔每个100个字符 谢谢 标记
答案 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