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のは、最上位ディレクトリに単一のファイルを作成することです。これは、ディレクトリのファイルを含めず.blahに、サブディレクトリ内のすべてのファイルを連結したものです。level*do_not_include_this_directory

私の目的はバッチファイルでこれを行うことです(このバッチファイルに含まれるさまざまなディレクトリに他のファイル連結ロジックがあります)が、cmd forロジックをいじって時間を費やして無駄になりました(一部のディレクトリにはスペースがあります)名前で)。たぶん、これは私がPythonスクリプトを使用して実行する必要があることですか?forでいくつかのループを使用しても、これは比較的簡単に実行できると思いますcopyが、これらのスキルは控えめに言っても不足しています(約2時間前にcmdに出くわしたばかりです)。

誰かがこれを行う方法を知っていますか、それとも私がPythonを使用して何かを書くことをお勧めしますか?どんな助けや提案もいただければ幸いです。

4

2 に答える 2

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スイッチが正確に正しいかどうかはわかりません。ファイルの前、ソースの後、または宛先の後など、表示される場所によって意味が異なります。

于 2013-02-11T04:48:18.260 に答える
0

これは、Windowsバッチファイルにとって適切に恐ろしいようです。Windows7でテスト済み。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
于 2013-02-11T02:08:43.727 に答える