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

时间:2019-09-13 09:42:42

标签: batch-file for-loop cmd

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

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

例如,我在一开始就有这个:

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;.....

3 个答案:

答案 0 :(得分:1)

可以尝试一下:

@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
)

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

答案 1 :(得分:1)

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"
)

答案 2 :(得分:0)

如果要继续使用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