【问题标题】:looping through each file and appending a header循环遍历每个文件并附加标题
【发布时间】:2017-01-24 12:15:56
【问题描述】:

我有一个标题文本文件,其中包含用作模板的所有列名。 我有一堆文件类型,它们在记事本中打开,扩展名为 .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%
)

【问题讨论】:

  • 所以你想追加标题到.cos文件或者你想要它们在第一行,因为它是一个标题?
  • 是的,我只想将标题(仅包含列名的一行)附加到 .cos 文件的第一行
  • 但是我希望对每个 .cos 文件都执行此操作,但不确定如何对文件夹中存在的每个 .cos 文件执行此操作。
  • 顺便说一句,这不是appending ;)

标签: batch-file cmd


【解决方案1】:

要设置源/目标目录,只需更改 _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:添加了评论中要求的名称/日期功能(我将日期中的 SPACE 字符替换为 HYPHEN s,所以如果 SPACE 是列分隔符,则日期不会计为多列)。读取的文件 (handle_file) 是从 @jeb 's answer 复制(和改编)的。

【讨论】:

  • 如果您使用的是 Windows Vista 或更高版本,您也可以使用forfiles
  • 这会将 .cos 文件的原始名称保留到目标位置吗?
  • @abs786123:目的地是_TARGETFILE;它可以设置为任何东西(当前:target.txt)。
  • @Clijsters:谢谢,我知道forfiles,但我个人觉得使用老式的for 更舒服(尽管有些人可能会说它在某种程度上是在重新发明轮子)。另外,有时我使用运行 XP 的旧 PC :)。
  • @Clijsters,我几乎总是选择经典的for 循环,除非需要一些(相对)日期过滤(forfiles /D),因为forfiles 需要执行的命令是嵌入在单独的cmd 实例中,这会减慢循环速度并可能导致难以构建正确的语法(可能需要进行一些转义,这会使命令行难以辨认,并且如果正文中有多个命令,这条线可能会长得令人不舒服)...
猜你喜欢
  • 1970-01-01
  • 2014-11-12
  • 2012-04-25
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 2016-06-15
相关资源
最近更新 更多