2009-08-03 9 views
35

私は初心者だ、そう私と一緒にクマ...複数のディレクトリから特定の拡張子を持つバッチファイルのコピーファイルは

私は私は1つのいくつかのサブディレクトリに散在しているすべての.docのファイルをコピーしようとしていますメインディレクトリをバッチファイルを使用して別のディレクトリにコピーします。

"C:\Main directory\sub directory" dir /b /s *.doc > "C:\Main directory\sub directory\filelist.txt"

私は1つのディレクトリにそれらをXCOPYするために使用するどのようなスクリプト:私は、すべてのファイル(何百もある)私が使用してコピーするこれらのディレクトリのうちのfilelist.txtを取得するために管理していますか?これらのファイル名を実際につかむコードをfilelist.txtからxcopiesにすることはできますか?

参考までに、私がやりたいことをしているように見えたので、私は以下の質問を見ましたが、それは私にとってはうまくいかなかったのです。

Using xcopy to copy files from several directories to one directory

また、私は本当に私は、各項目が何を教えするので、コードを打破してください、あるいは少なくともそれを説明するリンクが含まれ、この概念を理解したいと思います。

+1

Windowsエクスプローラを開き、* .DOCのための検索ではメインディレクトリ作るすべて(Ctrlキー+]を選択します再帰的なオプションを指定してXCOPYコマンドを使用しますA)をコピーして新しいディレクトリに貼り付けてください。私も最初はこのためにcmd行に行きましたが、GUIソリューションははるかに高速です:) – Alex

+0

* .docを検索して結果をコピーすることができます。 – aliqandil

答えて

54

コードは以下のような動作

for /R c:\source %%f in (*.xml) do copy %%f x:\destination\ 

バッチファイル溶液中、パターン(\*.xml)に一致するディレクトリc:\sourceとサブディレクトリ/R内の各ファイルforため

はちょうど私のWindows XPコンピュータ上でそれをここにテストした宛先に、変数%%fx:\\destination\\

をその後、各ファイルのdoコピーファイルcopy %%fをファイル名を入れますそれは私のための治療のように働いた。しかし、コマンドプロンプトに入力したので、上記のリンクされた質問に記載されているように、単一の%f変数名のバージョンを使用しました。

+1

EXE名にスペースが含まれていると、どのように問題に対処しますか? – Euclid

+1

@Euclid私の頭の上から私は最後の%% fを '%% f'に変更してスペースを保護します –

+3

ありがとうございました。そのフォルダを保持している間、これをどうすればできますか?例:フォルダ名とツリー構造にファイルを保存する – codeshark

6

Powershellに切り替えた理由は次のとおりです。それを試してみて、それは楽しいです:

Get-ChildItem -Recurse -Include *.doc | % { 
    Copy-Item $_.FullName -destination x:\destination 
} 
+6

実際には 'gci -rec -inc * .doc | 'Copy-Item'がパイプライン入力を受け入れるので、' cp -dest X:\ Destination'となります。 'Get-ChildItem'を完全に削除し、' Copy-Item'が '-Recurse'と' -Include'を持っているので 'Copy-Item -Recurse -Include * .doc -Destination C:\ Destination'を実行するだけです。同じように。 – Joey

+0

これはサブフォルダ構造を保持していますか? –

+1

@Joey最初の提案がうまくいかず、2番目の質問 "*以下のパラメータの値を提供する:"。 Recurseを終了しようとしたら、Get-Help Copy-Item -Detailedを見て、最初の提案を試してみることに決めました。 ;) – ruffin

1

あなたもブランドン、短いと甘い

c:\test> cscript /nologo mycopy.vbs 
4

mycopy.vbsとして、コマンドラインで保存するVBScript

Set objFS = CreateObject("Scripting.FileSystemObject") 
strFolder = "c:\test" 
strDestination = "c:\tmp\" 
Set objFolder = objFS.GetFolder(strFolder) 

Go(objFolder) 

Sub Go(objDIR) 
    If objDIR <> "\System Volume Information" Then 
    For Each eFolder in objDIR.SubFolders  
     Go eFolder 
    Next 
    For Each strFile In objDIR.Files 
     strFileName = strFile.Name 
     strExtension = objFS.GetExtensionName(strFile) 
     If strExtension = "doc" Then 
      objFS.CopyFile strFile , strDestination & strFileName 
     End If 
    Next  
    End If 
End Sub 

を使用することができます。柔軟性もあります。

set dSource=C:\Main directory\sub directory 
set dTarget=D:\Documents 
set fType=*.doc 
for /f "delims=" %%f in ('dir /a-d /b /s "%dSource%\%fType%"') do (
    copy /V "%%f" "%dTarget%\" 2>nul 
) 

これが役に立ちます。

コピー後に( '||'を使用して)いくつかのチェックを追加しますが、エラーが発生したときにどのように「コピー/ v」が反応するかわかりません。

あなたはこれを試してみたいことがあります。コピーラインとして

copy /V "%%f" "%dTarget%\" 2>nul|| echo En error occured copying "%%F".&& exit /b 1 

を。あなたが何かを手に入れたら教えてください。)

33

だけ

xcopy c:\*.doc k:\mybackup /sy 

/sが、それ "再帰的"

+4

これは私の一日を作った。どうもありがとう! – degot

+4

しかし、ファイルが 'c:'のサブフォルダである場合、サブフォルダを持たないファイル自体の代わりにサブフォルダと '.doc'ファイルもコピーされます。 – ron

+0

私の一日も作りました。ありがとう。 – Govinda

関連する問題