循环遍历每个文件并附加标题

时间:2016-09-16 09:54:53

标签: batch-file cmd

我有一个标题文本文件,其中所有列名都用作模板。 我有一堆文件类型在记事本中以.cos

的分机打开

到目前为止,我一直在做的是使用以下内容覆盖所有.cos文件内容的头文件:

type *.cos >> header.txt

但是,我需要知道如何将头文件单独附加到每个.cos并将输出名称作为.cos文件的输入名称(可能放入新目录),因此它不会覆盖原始

如果有人可以请求帮助。

谢谢

 @echo off
 setlocal enabledelayedexpansion

 set C:\Users\hyea\Desktop\Testing\Source=src
 set C:\Users\hyea\Desktop\Testing\Target=dst
 set C:\Users\hyea\Desktop\Testing\Target="%_DSTDIR%\target.txt"

 type "%C:\Users\hyea\Desktop\Testing\Source%\header.txt" 
 >    %C:\Users\hyea\Desktop\Testing\Target%

 for /f "tokens=*" %%f in ('dir /b /a-d    
 "!C:\Users\hyea\Desktop\Testing\Source!\*.cos"') do (
  type "!C:\Users\hyea\Desktop\Testing\Source!\%%f" >>  
  %C:\Users\hyea\Desktop\Testing\Target%
)

1 个答案:

答案 0 :(得分:3)

要设置源/目标目录,只需更改_SRCDIR / _DSTDIR变量(不要将它们括在双引号()中,因为代码会自动处理)

以下是代码:

@echo off
setlocal enabledelayedexpansion

set _SRCDIR=C:\Users\hyea\Desktop\Testing\Source
set _DSTDIR=C:\Users\hyea\Desktop\Testing\Target

for /f "delims=" %%f in ('dir /b /a-d "!_SRCDIR!\*.cos"') do (
    type "!_SRCDIR!\header.txt" > "!_DSTDIR!\%%f"
    call :handle_file "!_SRCDIR!\%%f" "!_DSTDIR!\%%f"
)
goto :eof

:handle_file
    set _TMPVAR0=%~t1
    setlocal disabledelayedexpansion
    for /f "usebackq delims=" %%g in (`"findstr /n ^^ %1"`) do (
        echo %%g
        set "_TMPVAR1=%%g"
        setlocal enabledelayedexpansion
        set "_TMPVAR1=!_TMPVAR1:*:=!"
        echo.%~1 !_TMPVAR0: =-! !_TMPVAR1!>> %2
        endlocal
    )
    goto :eof

@ EDIT0 :用OP机器上的实际路径替换了我使用过的样本路径。

@ EDIT1 :修改了将标题内容+每个 .cos 内容转储到单独文件中的代码。 注意:现在_SRCDIR_DSTDIR 必须不同!!!

@ EDIT2 :在评论中添加了名称/日期功能(我用 HYPHEN 替换了日期中的 SPACE 字符,所以如果 SPACE 是列分隔符,则日期不会计为多列。从@jeb 's answer复制(并调整)文件读取(handle_file)。