0

ディレクトリ ツリーを解析し、各サブディレクトリから新しいフォルダに 1 つのファイルをコピーするバッチ ファイルを作成する方法を見つけようとして、Google とフォーラムを何日も検索しました。

私はこれをリードとして持っています: http://www.pcreview.co.uk/forums/can-copy-file-multiple-folders-t1959548.html

そしてこれ... https://stackoverflow.com/questions/1...in-a-directory

そして、私はこれを試しました:

@ECHO OFF
CLS
PAUSE
FOR /R %%A in (C:\Users\Liam\Desktop\Master) DO (   
COPY %%A  C:\Users\Liam\Desktop\Master\Master-Copies\
GOTO :Exit
)
:Exit
Pause

何が起こっているのかを正確に把握しようとしているため、一時停止が存在します。

私の「マスター」ディレクトリ内には、約 250 のサブディレクトリがあります。各サブディレクトリから 1 つのファイルをコピーし、「Master-Copies」という名前の新しいサブディレクトリに配置したいと考えています。このサブディレクトリには、最終的に 250 個のファイルが必要です。サブディレクトリとファイルの名前にはスペースが含まれていませんが、この状況が再び発生した場合に備えて、その機能をバッチ ファイルに組み込みたいと考えています。各サブディレクトリの最初のファイルをコピーしたいと思います。「FIRST」ファイルが相対的であることは他のフォーラムを読んで知っていますが、名前でソートされた最初のファイルにしたいと思います。

私はたくさん質問していることを知っています。うまくいけば、ここにいる天才がプログラミングに慣れていない子供を助けることができます.

4

1 に答える 1

1

問題1-/Rオプションの使用を間違えています。ルートディレクトリは/Rオプションの後に続く必要があり、ファイルフィルタはIN()句に表示される必要があります。FOR /?コマンドラインから入力して、FORヘルプを読みます。

問題2-最初のGOTOの後でループが中止されるため、多くても1つのディレクトリからファイルをコピーします。

問題3-ルートのサブディレクトリであるため、宛先ディレクトリをスキップする必要があります。

解決策:2つのループが必要になります。最初のループはルートから始まるディレクトリ階層をたどり、2番目のループは単一のディレクトリ内のファイルを一覧表示します。1番目のファイルをコピーした後、2番目のループから/ BまたはGOTOを終了する必要がありますが、2番目のループが1番目のループ内に埋め込まれている場合、これは機能しません-exit/gotoは最も外側のループから終了します。

この問題を回避するには、1番目のループで2番目のループを含むサブルーチンを呼び出す必要があります。次に、2番目のループから/ Bを終了すると、1番目のループに戻り、中断したところから再開します。ディレクトリが宛先ディレクトリと一致しない場合にのみ、サブルーチンを呼び出します。

@echo off
setlocal
set root="C:\Users\Liam\Desktop\Master"
set dest="C:\Users\Liam\Desktop\Master\Master-Copies\"
for /r /d %root% %%D in (*) do if "%%D" neq %dest% call :copyFirstFile "%%D"
pause
exit /b

:copyFirstFile
for %%F in ("%~1\*") do (
  copy "%%F" %dest%
  exit /b
)
于 2012-02-13T02:31:17.823 に答える