【问题标题】:Concatenating files in multiple directories from batch file从批处理文件连接多个目录中的文件
【发布时间】:2013-02-11 01:09:49
【问题描述】:

我正在尝试连接来自多个目录的文件。从单个目录,我知道你可以执行

copy /B *.blah all.blah

将扩展名为 .blah 的文件连接到一个名为 all.blah 的文件中。我的结构是这样的:

level 1/
    level 2_1/
        file_1.blah
        file_2.blah
    level 2_2/
        ...
    level 2_3/
        ...
    do_not_include_this_directory/
        ...

我要做的是在顶级目录中创建一个all.blah 文件,该文件是level* 子目录中所有.blah 文件的串联,不包括来自@ 的任何文件987654328@目录。

我的目标是在批处理文件中执行此操作(此批处理文件中包含的不同目录将有其他文件串联逻辑),但我花了一个小时过去玩cmd for 逻辑无济于事(我的一些目录名称中有空格)。也许这是我应该使用 python 脚本做的事情?我认为这可以相对容易地完成,尽管使用一些 for 循环和 copy,但我在这些事情上的技能至少可以说(大约 2 小时前刚刚遇到 cmd)。

有谁知道如何做到这一点,或者你会建议我振作起来并使用 Python 编写一些东西吗?任何帮助或建议将不胜感激。

【问题讨论】:

    标签: batch-file cmd xcopy


    【解决方案1】:

    无需批处理脚本即可从命令行轻松完成 :)

    copy nul all.blah >nul&for /d %F in (level*) do @copy /b all.blah + "%F\*.blah" >nul
    

    作为批处理脚本

    @echo off
    copy nul all.blah >nul
    for /d %F in (level*) do copy /b all.blah + "%F\*.blah" >nul
    

    我不确定/B 开关是否完全正确。它具有不同的含义,具体取决于它出现的位置:在任何文件之前、在源之后或在目标之后。

    【讨论】:

    • 确实,他们在内置帮助中为[/A | /B] 指定了多个位置。也许,在所有文件之前指定选项应该意味着它们都是(被视为)二进制文件。你确定是这样吗?
    • @AndriyM - 我怀疑是这样,但我不确定。
    • 我仍然有忽略“不包含...”目录的问题,但这是因为我没有很好地解释我的情况。如何跳过具有相似名称的目录。 AKA 我想要以“0xxxx 级”(x 是某个数字)开头的目录,忽略任何其他目录(包括“Axxxx 级”(x 是什么)?如果您需要更多说明,我可以编辑我的问题。
    • @JesseBuesking:将level* 掩码扩展到"level 0*",也许吧?或者可能是"level 0????"
    【解决方案2】:

    这对于 Windows 批处理文件来说似乎是相当可怕的。在 Windows 7 下测试; YMMV等

    @rem get all pathnames, even in excluded directories
    @rem EDIT THIS COMMAND to change wildcard to match
    dir /b/s *.c >files.tmp
    @rem get rid of things with prefix we want to exclude
    @rem EDIT THIS COMMAND to change prefix
    findstr /V "C:\temp\fee" files.tmp >files2.tmp
    del copy.tmp
    @rem append things one at a time the hard way!
    For /f tokens^=*^ delims^=^ eol^=  %%a in (files2.tmp) do (
    copy "%%a" + copy.tmp copy2.tmp
    del copy.tmp
    rename copy2.tmp copy.tmp
    echo.%%a)
    @rem clean up
    del copy2.tmp
    del files.tmp
    del files2.tmp
    

    【讨论】:

      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多