2

指定したフォルダー内の各サブフォルダーに移動して、そこにあるすべてのテキスト ファイルを 1 つのテキスト ファイルに連結する、Windows コマンド プロンプトで入れ子になった for ループを作成しようとしています。私は使用しようとしています

FOR /F  IN (.) DO (for %f in (*.dat) do type “%f” >> aggregate.txt)

しかし、それは機能していません。誰か助けて!

4

2 に答える 2

2

.txtファイルと.datファイルのどちらを連結するかはわかりませんが、.datでは機能するはずです。

(for /r %f in (*.dat) do @type "%f")>aggregate.txt

FORステートメントの多くの形式HELP FORの詳細については、コマンドラインから入力してください。

各ファイルに対して追加リダイレクトを実行するよりも、コマンド全体を括弧で囲み、リダイレクトを1回だけ実行する方が効率的です。

編集-コメントの洗練された要件のソリューション:フォルダごとに1つの集計

必要に応じて、最初に既存のaggregate.txtファイルを削除します

del /s aggregate.txt

次に、以下はあなたにあなたの望ましい結果を与えるはずです

for /r %F in (*.dat) do @type "%F" >>"%~dpF\aggregate.txt"

コマンドをバッチファイルに入れる場合は、FOR変数の前にパーセントを2倍にする必要があることに注意してください。たとえば、コマンドラインではバッチファイルに含める%F必要があります。%%F

于 2012-06-04T22:42:13.600 に答える
1

for /r ...特定のディレクトリのすべてのサブディレクトリをウォークするために使用するだけです。例:

for /r %f in (*.dat) do @type %d >> aggregate.txt

ネストは必要ありません。代わりに:

(for /r %f in (*.dat) do @type %d) >> aggregate.txt

/d代わりにを使用/rして、階層の1レベルだけ深く移動し、フォルダーのみを一覧表示できます(特定のワイルドカードに一致するファイルは一覧表示しません)。これは、ディレクトリトラバーサルを「手動で」行うときにパズルのピースとして使用できます。ただし、NTスクリプトでの変数拡張(ループ内、サブありとなし)の問題を考えると、単純な解決策に固執することをお勧めします。私は過去にこれをクリーンアップスクリプトに使用しましたが、しばらくの間移動しfor /rました。


これで始められるはずです

@echo off
for /r %%i in (*.dat) do @call :ConcatFolder "%%i"

:ConcatFolder
if "" == "%1" goto :EOF
setlocal ENABLEEXTENSIONS
set FLDR=%~dp1
type "%1" >> "%FLDR%aggregate.txt"
endlocal & goto :EOF
于 2012-06-04T23:36:20.533 に答える