我每天处理一个大文本文件,我需要在每行8个字符中添加一个“ - ”,例如:
ABCDEF DC01 B738
ABCDEF B787
会变成
ABCDEF -DC01 B738
ABCDEF - B787
这对批处理文件有多容易?
问候 大卫
答案 0 :(得分:1)
@echo off
setlocal enabledelayedexpansion
(for /f "delims=" %%a in (input.txt) do (
set line=%%a
set line=!line:~0,7!-!line:~7!
echo !line!
))>output.txt
注意:这会删除空行并且感叹号出现问题。 (可能是也可能不是问题;取决于您的文件内容)
它还将消除由于默认EOL字符而以;
开头的行
此外,行数限制为~8190字节最大长度(感谢dbenham)
答案 1 :(得分:0)
这是一个强大的"保留!
和空行的纯批处理解决方案。但它仍然限制在~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
这是一个真正强大而快速的解决方案,使用JREPL.BAT - a regular text processing utility纯脚本(批处理/ JScript),可以在任何Windows机器上从XP开始本地运行 - 无需第三方可执行文件。此解决方案也不会修改少于7个字符的行。
从命令行:
jrepl "^.{7}" "$&-" /f file.txt /o -
在批处理脚本中
call jrepl "^.{7}" "$&-" /f file.txt /o -
答案 2 :(得分:0)
这是一个简单的两行Batch-JScript 混合脚本解决方案,具有JScript语言的所有优点:快速,健壮,管理所有特殊字符并保留空行。此外,在阅读documentation之后,它很容易理解,然后针对其他类似任务进行修改。将其复制到扩展名为.BAT的文件。
@set @a=0 // & cscript //nologo //E:JScript "%~F0" < input.txt > output.txt & goto :EOF
WScript.Stdout.Write(WScript.Stdin.ReadAll().replace(/^.{7}/gm,"$&-"));