使用 .bat 文件在输出 txt 文件的每一行的开头插入文件名



我想在日志文件的每一行的开头插入文件名,但是在某些行的开头有一个;,我想保留它。

我已经成功插入了文件名,但分号;消失了。

例如,我在开头有这个:

1254778;FGT_1;1447;ggft....
;YH_4;14788;hhth;warning....
774895;HG_5;4778.....
;TR_8;7885;.....

使用我的代码后,我有这个:

FILENAME 1254778;FGT_1;1447;ggft....
FILENAME YH_4;14788;hhth;warning....
FILENAME 774895;HG_5;4778.....
FILENAME TR_8;7885;.....

这是我的代码:

@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims=;" %%a in (file1.log) do (
echo FILENAME %%a >>FILE1_.txt
)

对我来说,我正在尝试拥有这个:

FILENAME 1254778;FGT_1;1447;ggft....
FILENAME ;YH_4;14788;hhth;warning....
FILENAME 774895;HG_5;4778.....
FILENAME ;TR_8;7885;.....

for /F的选项字符串从"tokens=* delims=;"更改为delims^=^ eol^=(是的,不带引号(,以禁用分隔符和行尾字符:

@echo off
setLocal EnableDelayedExpansion
for /F usebackq^ delims^=^ eol^= %%a in ("file1.log") do (
echo FILENAME %%a>>"FILE1_.txt"
)

试试这个:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('type "file1.log" ^| find /v /n "" ^& break ^> "FILE1_.txt"') do (
set "str=%%a"
call set "str=%%str:*]=%%"
echo FILENAME !str!>> FILE1_.txt
)

我们实际上只是添加行号,以便我们可以精确地复制行,然后在打印到新文件之前简单地删除行号。

如果你想推进PowerShell,另一种方法。

@ECHO OFF
powershell -NoLogo -NoProfile -Command ^
"Get-Content -Path '.file1.log' | "^
"ForEach-Object { '{0} {1}' -f @('FILENAME', $_) } | "^
"Out-File -FilePath '.FILE1.txt' -Encoding ascii"
TYPE .FILE1.txt

最新更新