2016-03-24 7 views
0

まず、実用的な例を紹介して、自分が何をしているのか理解できるようにします。これは私の仕事用コンピュータとネットワーク上にあるので、私は管理者権限を持っていないことに注意してください。複数のファイル名のディレクトリを一括検索

私はアイテムのリストを持っています - 現在、Excelには約1000行あります。私はこれらの項目を参照するファイルに含まれているかもしれないし、含まれていないかもしれない文字を削除するためにそれを正規化しました。私は、これらの項目に関連する特定の文書を保持するディレクトリ(WindowsエクスプローラまたはSharepoint経由のディレクトリ)にアクセスできます(もしその情報があれば)。次のようにこのディレクトリは構成されています

  • A:
    • \アルマジロ\
        • Armadillo.doc
      • \陸軍
        • Army.doc
      • B \
      • \ブル
        • Bull.doc

ある種のバッチ検索を実行して、テキスト行に一致するファイルまたはディレクトリ名があるかどうかを調べ、それを1000行全体に対して実行したいとします。例えば

、私のファイルは、テキストの次の行を持って言う:

Armadillo 
Army 
Baby 
Bull 

とディレクトリを想定してはアルマジロ、陸軍、およびブルに一致するファイルがありますが、赤ちゃんが..私は出力をたいていません例えば、細部へのファイルの名前と場所:

Armadillo  A:\A\Armadillo\Armadillo.doc 
Army   A:\A\Army\Army.doc 
Baby 
Bull   A:\B\Bull\Bull.doc 
...and so on for every line. 

は、私が唯一のターゲットディレクトリを読み、一致(または不一致)を報告したい - 一切ファイルの変更。私は実際のファイルを調べる必要はなく、ファイル名だけを調べます。私はまた、ファイルシステムを潜在的に変更する可能性のあることは何もしたくありません。私はちょうど手作業で、行ごとに永遠に取ることができるプロセスを自動化したい。

Excelでのマクロ、メモ帳でのファイルの検索++、grepなどでこれを行うには、いくつかの方法があると確信しています。この問題の解決策を探すには数時間を費やしましたが、ソリューションは、同様の問題を解決しようとしているように見えますが、正確ではありません。私は、ファイルシステムを変更したり、重大な負荷をかけることなく、これを行う簡単な方法があることを願っています。

+1

「私は解決策を探して何時間も過ごしました」何が効いていないのですか? – findwindow

答えて

0
for /f "delims=" %A in (filename.txt) do dir /s /b "c:\startingdir\%A" >> results.txt 

は助けをfor /?dir /?を参照してください。 >>は、ファイルにputを付加することを意味します。バッチファイルでは、対話形式で入力するときに%Aの代わりに%%Aを使用します。

&は、複数のコマンドを許可します。

for /f "delims=" %A in (filename.txt) do echo %A & dir /s /b "c:\startingdir\%A" >> results.txt 
+1

DIRファイルマスクにワイルドカード文字を追加する必要があります。 – dbenham

+0

ファイルにファイル名があるため、これには含まれません。 –

+0

ArmadilloがArmadillo.docと一致しないため、DIRが失敗します。また、Armadillo.docがArmadilloという名前のフォルダーにあることを確認しません。参照してください[私の答え](http://stackoverflow.com/a/36262300/1012053) – dbenham

0

これはファイル名をすべて揃えます。 "c:\ startingdir \ Armadillo \ Armadillo.x \ somefile"や "c:\ sartingdir \ Armadillo \ Armadillo.x.txt"などの問題を引き起こす可能性のある微妙なエッジケースがあります。しかし、私はこれがあなたのニーズを満たすのに十分だと思う。

@echo off 
for /f "useback eol=: delims=" %%D in ("file.txt") do (
    for /f "eol=: delims=" %%F in (
    'dir /b /a-d /s "c:\startingdir\%%D.??????????????" 2^>nul^|findstr /li "\\%%D\\%%D."' 
) do echo %%D %%F 
) || echo %%D 
関連する問題