2017-02-17 11 views
0

内のファイルのチェック、私はこれを見つけました特定の命名規則に従うサブディレクトリの半分です。は、ディレクトリ内のファイルをチェックする方法を見つけようとしてのみ、特定のサブディレクトリ

enter image description here

「ToBeMoved」フォルダ内のみのチェックに次の行を手直しするためにとにかくはありますか?

私はそれをこのように書いてみました:

>nul 2>nul dir /a-d/b/s "\\SERVER\Path\*ToBeMoved" && (echo Files exist) || (echo No files found) 

をしかし、それは動作しません。私は、文字列 "ToBeMoved"を持つユーザーレベルのフォルダを探しているので推測しています。

+0

をエスケープする必要がありますディレクトリが空であるかどうか。 – Squashman

+0

'/ b'オプションを追加しない限り、あなたの最初のコードは記述どおりに動作しません。 – dbenham

答えて

1

あなたがリストした最初のコードには/bオプションがありません。それが実際に存在すると仮定すると、元のコードではディレクトリ階層内のすべてのファイルのフルパスがリストされますが、ファイルが見つかったかどうかによって出力がNULLになり、条件付きで処理が行われます。

nullにリダイレクトする代わりに、*ToBeMoved\を含むパスを論理的に探して、FINDにパイプするだけで済みます。その出力はnullにリダイレクトでき、条件付きで戻りコードFINDに基づいてアクションを実行できます。私は文字列を探すときには無視します。

あなたが代わりに FINDSTRを使用することができ
dir /b /a-d /s "folderName" 2>nul|find /i "ToBeMoved\" >nul && (echo Files exist) || (echo No files found) 

が、その後、バックスラッシュは、あなたがToBeMovedディレクトリのリストを取得し、かどうかをチェックするために `FOR/D/R`コマンドを使用することができ

dir /b /a-d /s "folderName" 2>nul|findstr /i "ToBeMoved\\" >nul && (echo Files exist) || (echo No files found) 
+0

うまく動作していないように見えるため、これについていくつかのテストを行ったところ、いくつかのサブディレクトリで "Thumb.db"というファイルが存在することがわかりました。それは隠されたファイルのようですが、隠しファイルを無視する方法がありますか? – Neal

+0

Nevermind、 '/ a-h' – Neal

1

これを試してください。 PUSHDコマンドで必要な場所のルートパスを変更します。

@echo off 

PUSHD "H:\users" 
FOR /F "delims=" %%G IN ('dir /ad /b /s ToBeMoved') DO (
    pushd "%%~G" 
    >nul 2>nul dir /a-d/b/s && (echo Files exist in %%~G) || (echo No files found in %%~G) 
    popd 
) 
popd 
pause 

私のための出力。

No files found in H:\users\johndoe\ToBeMoved 
No files found in H:\users\maryjane\ToBeMoved 
Files exist in H:\users\UserWithFiles\ToBeMoved 
Press any key to continue . . . 

EDIT: はちょうど私が私がプロンプトからcmdをDIRを実行したToBeMovedという名前のフォルダ内のファイルを持っているかということをお見せします。私はテストのために1つのファイルを入れます。

H:\users>dir /a-d/b/s 
H:\users\UserWithFiles\ToBeMoved\moveme.txt 
+0

私は混乱しています、私は以前にpushd関数を使ったことはありません。どこのスクリプトを特定のディレクトリツリーに向けていますか?それは 'H:\ users 'で、' \\ SERVER \ Path \ Users \'に置き換えられていて、同じ出力を得られませんでした。 'ファイルが見つかりません。 ' – Neal

+0

@Neal Correct。ルートパスをPUSHDコマンドで指定します。パスはUNCパスまたはドライブ文字である可能性があります。ファイルが見つかりませんでした(フォルダパス)**。 – Squashman

+0

答えから直接コピーして貼り付けました。複数回チェックしましたが、いつも同じ出力が得られます。 – Neal

関連する問題