2013-02-11 167 views
1

我想连接来自多个目录的文件。从单一的目录,我知道,你可以执行从批处理文件连接多个目录中的文件

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的串联顶级目录,而不包括do_not_include_this_directory目录中的任何文件。

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

有没有人知道如何做到这一点,或者你会只是建议我贬低和使用Python写东西?任何帮助或建议,将不胜感激。

回答

2

可以在命令行中很容易做到没有一个批处理脚本:)

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开关完全正确。它具有不同的含义,具体取决于它出现的位置:在任何文件之前,源之后或目标之后。

+0

的确,他们已经为'[/ A |/B]'在内置的帮助中。也许,在所有文件之前指定选项意味着它们全部被视为(被视为)二进制文件。你肯定知道这是否是这样吗? – 2013-02-11 09:47:12

+0

@AndriyM - 我怀疑是这样,但我不确定。 – dbenham 2013-02-11 10:53:21

+0

我仍然有忽略“不包括...”目录的问题,但这是因为我没有很好地解释我的情况。如何跳过名称相似的目录? AKA我希望以“level 0xxxx”(x是一些数字)开头的目录,忽略任何其他目录(包括像“级别Axxxx”(x是什么)的目录)如果需要更多的说明,我可以编辑我的问题 – JesseBuesking 2013-02-12 05:25:00

0

这对于Windows批处理文件来说似乎相当可怕。在Windows 7下测试;情况因人而异,等

@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 
相关问题