Batch file 编辑文本文件以添加"-&引用;8个字符
我每天都要处理一个大的文本文件,我需要在每行添加一个“-”字符,例如:Batch file 编辑文本文件以添加"-&引用;8个字符,batch-file,text,Batch File,Text,我每天都要处理一个大的文本文件,我需要在每行添加一个“-”字符,例如: ABCDEF DC01 B738 ABCDEF B787 将成为 ABCDEF -DC01 B738 ABCDEF - B787 这对于批处理文件来说有多容易 问候 大卫 注意:这将删除空行,并存在感叹号问题。(可能是问题,也可能不是问题;取决于您的文件内容) 它还将消除以开头的行由于默认的下线字符。 此外,行的最大长度限制为8190字节(感谢dbenham)这是一个“健壮”的纯批处理解决方案,它保留了
ABCDEF DC01 B738
ABCDEF B787
将成为
ABCDEF -DC01 B738
ABCDEF - B787
这对于批处理文件来说有多容易
问候
大卫
注意:这将删除空行,并存在感叹号问题。(可能是问题,也可能不是问题;取决于您的文件内容)它还将消除以
开头的行代码>由于默认的下线字符。
此外,行的最大长度限制为8190字节(感谢dbenham)这是一个“健壮”的纯批处理解决方案,它保留了代码>和空行。但它的最大行长度仍然限制在8190左右,而且对于大文件来说速度非常慢。这不会修改少于7个字符的行
@echo off
setlocal disableDelayedExpansion
set "file=file.txt"
>"%file%.new" (
for /f "delims=" %%A in ('findstr /n "^"` "file.txt"') do (
set "s=%%A"
setlocal enableDelayedExpansion
set "s=!s:*:=!"
if not defined s (
echo(
) else if "!s:~7!" equ "" (
echo(!s!
else (
echo(!s:~0,7!-!s:~7!
)
endlocal
)
)
move /y "%file%.new" "%file%" >nul
这是一个真正健壮、快速的解决方案,它使用的是纯脚本(批处理/JScript),从XP开始在任何Windows机器上本机运行-不需要第三方可执行文件。此解决方案也不会修改少于7个字符的行
@echo off
setlocal disableDelayedExpansion
set "file=file.txt"
>"%file%.new" (
for /f "delims=" %%A in ('findstr /n "^"` "file.txt"') do (
set "s=%%A"
setlocal enableDelayedExpansion
set "s=!s:*:=!"
if not defined s (
echo(
) else if "!s:~7!" equ "" (
echo(!s!
else (
echo(!s:~0,7!-!s:~7!
)
endlocal
)
)
move /y "%file%.new" "%file%" >nul
从命令行:
jrepl "^.{7}" "$&-" /f file.txt /o -
从批处理脚本中
call jrepl "^.{7}" "$&-" /f file.txt /o -
这是一个简单的两行批处理JScript混合脚本解决方案,它具有JScript语言的所有优点:快速、健壮、管理所有特殊字符和保留空行。此外,它非常简单,可以被理解,然后在阅读本手册后针对其他类似任务进行修改。将其复制到扩展名为.BAT的文件中
@set @a=0 // & cscript //nologo //E:JScript "%~F0" < input.txt > output.txt & goto :EOF
WScript.Stdout.Write(WScript.Stdin.ReadAll().replace(/^.{7}/gm,"$&-"));
@set@a=0//&cscript//nologo//E:JScript“%~F0”output.txt&goto:EOF
Write(WScript.Stdin.ReadAll().replace(/^.{7}/gm,“$&-”);
然后阅读您的问题,并分享您遇到的问题。回答您的问题:使用批处理文件很容易做到这一点<代码>;)代码>@Stephan:你如何证明你对这个问题的编辑是正确的?您似乎添加了原始问题中没有的其他场景。@abelenky:请参阅-检查“并排降价”我看到您的降价了。您添加了一个在David的原始问题中不存在的新场景。为什么?为什么只重定向到output.txt
,而不是附加每个echo!排队
到output.txt
?因为它是-特别是对于大文件(如问题状态)。我还担心它会消耗大量内存,将所有输出集合到mem中。嗯,它在写入之前不会收集内存中的所有数据。相反,它打开文件,写入要写入的内容(不关闭文件),直到没有更多数据为止。然后关闭文件。(您可以通过在写入文件时键入文件进行检查(您可能希望在循环中添加一个超时-t1
,以获得足够的时间来执行此操作))另一个限制-这将消除以开头的行代码>由于默认的下线字符。此外,行的最大长度限制为8190字节。。