web-dev-qa-db-ja.com

Windowsのls *(アスタリスク)ディレクトリワイルドカードに相当しますか?

Windowsの世界にいる、長年のUnix/Linuxユーザーからの別の質問。まず、私が何をしようとしているのかを正確に説明しましょう。私はWindows cmd.exeシェルを使用しています。現在のディレクトリの下にあるbin\Debug階層を含むすべてのディレクトリを一覧表示し、それらにファイルが含まれているかどうかを確認します(例:NAntクリーンターゲットが正常に動作しています)。私の階層は次のようになります。

\Current
    \DirA
         \bin
             \Debug
                  (some files under debug)
             \Release
    \DirB
         \bin
             \Debug
    \DirC
         \bin
             \Release

Unixでは、ls */bin/DebugDirA/bin/Debug、そしてDirB/bin/Debugは空です。私はcmd Shellでさまざまなゆがみを試しましたが、次のようなことを続けてください:

> dir *\bin\Debug 
ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません。
 
> dir *\*\* 
ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません。

Dirコマンドについて理解できない微妙なことはありますか、それともそのように制限されているだけですか?

はい、エクスプローラーに切り替えて、ナビゲートし、右クリックして、最終的には自分がやりたいことを行う検索を作成できることに気づきましたが、quick-n-dirtyコマンドラインソリューションの方が興味があります。

15
Ogre Psalm33

このような何かはあなたが望むことをするはずです。プロジェクトタイプのルートディレクトリ:


c:\path\to\slndir>dir *.dll *.exe /s /b | findstr /i "bin\debug"

Dir引数:/ s-再帰的、/ b-「ベア」、追加情報なし
findstr引数:/ i-大文字と小文字を区別しない

一般に、「help command」はシェルコマンドのヘルプを表示します。それがうまくいかない場合は、
'コマンド /?'通常はヘルプが表示されます。

13
james

Windowsは、Linuxのようにワイルドカードを実行しません。ワイルドカードを含めることができるのはファイル名部分のみです。

Windowsで動作するlsのバージョンをダウンロードして使用できます。私は Cygwin を使用しましたが、他にもあるはずです。

7
Mark Ransom
@for /D /r %P in (.) do @for %Q in ("%~fP\bin\Debug\*") do @echo %~ftzaQ

ナイスではありませんが、動作するはずです。 .cmdファイルに入力することもできます(その後、すべての%を2つの%%に置き換えます)。または、doskeyを使用してマクロを定義します(はい、まだ存在します)。

Cmd拡張が有効になっていることを確認します。

EDIT:仕組み:

最初のforループは、すべてのサブディレクトリ(/ Dおよび/ rスイッチ)を繰り返し処理します。 %〜fPは、そのディレクトリの完全パスに展開されます。次に、そのパスに\ bin\Debug *を追加します。 2番目のforループは、一致するすべてのファイルを列挙します。 %〜ftzaQは、一致するすべてのファイルに展開され、エコーによって画面に出力されます。奇妙な%〜ftzaQは、dir出力のようにフォーマットします。 @文字は、コマンド自体が画面に出力されるのを防ぎます。

詳細については、

3
Meinersbur

nxutils にはlsコマンドがあります。ただし、問題は実際にはWindowsシェルにあります。 UNIXでは、シェルは*/bin/Debugを関連するパス名に入力し、個別のコマンドライン引数としてlsコマンドにフィードします。

Cygwinは確かにあなたのためにトリックを行います、または bash のようなUNIXシェルのWindowsポートを試すことができます。スクリプトを使用したい場合は、pythonで glob module を使用してかなり簡単にコードを作成できます。他のほとんどのスクリプト言語でも同等のコードを使用できます。

2
Tim Gilbert

「dir/s * .obj * lib」のようなことができます。一致したファイル数の最後に要約が表示されます。

2
Joel Lucsy

Windowsの世界では、cmd.exeはワイルドカードを展開しません-それらはそのままコマンドラインまたはargv配列でプログラムに渡されます。したがって、各プログラムはそれらを異なる方法で解析および展開し、一部の高度な使用法(あなたが探しているような)は一般的にサポートされていません。

timgilbertの提案 Cygwinを使用するのは良いことです。また、 GNUWin32パッケージ が役立つかもしれません。

0
Michael Burr