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


14

Windowsの世界で自分を見つけた長年のUnix / Linuxユーザーからの別の質問。まず、私がやろうとしていることを正確に説明させてください。私はWindowsのcmd.exeシェルを使用していますが、bin \ Debug階層を含む現在のディレクトリの下にあるすべてのディレクトリをリストし、それらにファイルが含まれているかどうかを判断します(例:NAnt cleanターゲットが正常に動作します)。私の階層は次のようになります。

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

Unixでは、にls */bin/DebugあるすべてのもののリストをDirA/bin/Debug表示して、DirB/bin/Debug空の事実を表示します。私はcmdシェルでさまざまなゆがみを試しましたが、次のようなものを続けてください:

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

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

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

はい、エクスプローラーに切り替えて、ナビゲートし、右クリックし、おそらく最終的には必要なことを行う検索を作成できることに気づきましたが、クイックnダーティコマンドラインソリューションに興味があります。


Windowsに追加できるすべてのUnixライクなツールについて知ることは素晴らしいことですが(そして、私は自宅でCygwinを使用していると信じています!)、どこに行っても常に利用できるとは限りません使用するすべてのPCにインストールしてください)。
オーガ詩33 33 09年

回答:


13

このような何かがあなたが望むことをする必要があります。プロジェクトのルートディレクトリで次のように入力します。


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

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

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


優秀な!私は、Windowsを「Linux化」するのに役立つツール/ツールキットがたくさんあることを認識していますが、私がやろうとしていることをWindowsで行う方法を探していました。
オーガ詩33 33 09年

7

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

Windowsで実行されるlsのバージョンをダウンロードして使用できます。Cygwinを使用しましたが、他にもあると確信しています。


PowerShellも
ジョエルCoehoorn

3
留意すべきもう1つの点は、Windowsでは、ワイルドカードはシェルではなくコマンドによって展開されることです。
ローレンスゴンサルベス

2

unxutilsにはlsコマンドがあります。ただし、問題は実際にはWindowsシェルにあります。UNIXでは、シェルは*/bin/Debug関連するパス名に展開され、それらを個別のコマンドライン引数としてlsコマンドに渡します。

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


2

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


閉じる。私はあなたに小道具を与えましたが、ジェームズの答えは、私のために\ debugの下にないファイルを除外するので、より近いです。
オーガ詩sal 33 09年

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

良くありませんが、動作するはずです。.cmdファイルに入れることもできます(すべての単一の%を二重の%%に置き換えます)。または、doskeyを使用してマクロを定義します(はい、まだ存在します)。

cmd拡張が有効になっていることを確認してください。

編集:仕組み:

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

詳細については、


私はこれを試しましたが、実際に動作します。しかし、cmdシェルでは多少経験が浅いので、まだ完全には理解していません:-)。
オーガ詩33 33 2009年

0

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

Cygwinの使用に関するtimgilbertの提案は良いものです。また、GNUWin32パッケージには役立つものがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.