ファイル名の文字数が 4 文字以下の場合、コマンド ラインを使用してファイルをコピーするにはどうすればよいですか?

ファイル名の文字数が 4 文字以下の場合、コマンド ラインを使用してファイルをコピーするにはどうすればよいですか?

特定の拡張子を持つファイル名が 4 文字以下のファイルを新しいフォルダにコピーしようとしています。これを数時間試してみましたが、イライラしてきました。コピー コマンドとワイルドカード ? と * を使用しました。

答え1

AFHがコメントで指摘したように、単純な「COPY ????.ext」は4つのファイル名で機能します。以下文字。DOS ベースのシステムにおける glob スタイルのパターン マッチングでは、* は「0 個以上の文字」を意味し、? は 0 個または 1 個の文字を意味するようです。ただし、このタイプのパターン マッチングはアプリケーション レベルで実行されることを必ず理解してください。つまり、Windows (および DOS) は、入力されたとおりにコマンド ラインをプログラムに渡して実行します。「????.ext」と入力すると、COPY コマンドはそれをそのまま認識します。

これを、私がこれまで使ってきた他のシェル、たとえば un*x (bash、tcsh など) と比較してください。これらのシェルでは、コマンド インタープリタが最初にすべてのパターン マッチを展開し、完全なファイル リストをコマンドに渡します。つまり、これらのシェルでは、「copy file.?」と入力すると、シェルは「copy file.1 file.2 file.3」を呼び出しますが、「copy」は通常、リテラルの「file.?」引数を見ることはありません。

(これが私の最初の答えが間違っていた理由です。私は、ないWindows の CMD.EXE の拡張方法。注意すべき点です。)

通常のWindowsコンソール/コマンドライン(ないWindows では、? と * の動作の仕方により、これを 1 つのコマンドで実行することは困難です。? は 1 つの文字に一致し、* は可能な限り多くの文字に一致します。どちらもカウントを指定することはできません。ただし、バッチ ファイルを使用して各コマンドを順番に実行すると、同じ効果が得られます。

@echo off
copy "????.ext" "target folder"
copy "???.ext" "target folder"
copy "??.ext" "target folder"
copy "?.ext" "target folder"

さまざまなバッチ ファイル テクニックを使用して、他のファイル名の長さで動作するように変更したり、異なるターゲット フォルダーを使用したりすることもできます。

また、最新の Windows OS では、Windows Script Host 経由で VBScript が利用できる可能性が高く、Win8 では PowerShell が利用できるはずです。どちらも、強力な正規表現などのより広範なプログラミング ロジックを可能にします。

関連情報