Windows 7には、次の4つのファイルを含むディレクトリがあります。
ファイルの拡張子が3文字を超える場合、ワイルドカード*の動作は奇妙に見えます。
dir *.txt
10/13/2014 04:14 PM 6 xxx.txt
10/13/2014 04:17 PM 6 xxx2.txt
10/13/2014 04:17 PM 6 xxx2.txt2
10/13/2014 04:14 PM 6 xxx.txt2
4 File(s) 24 bytes
0 Dir(s) 6,660,980,736 bytes free
Linuxマシンの場合のように、拡張子がtxtの2つのファイルのみが表示され、txt2のファイルは表示されないことが予想されます。 MS-DOSは、ファイル拡張子を3文字に切り捨てることを無視しますか、それとも最後に別のワイルドカードを自動的に追加しますか? txt拡張子のファイルだけを削除し、txt2のファイルは削除したくない場合、どのコマンドを使用する必要がありますか?ありがとう
MS-DOSを使用していません。それは3文字より長いファイル拡張子さえ許可しませんでした。 Windowsのコマンドライン(具体的には_cmd.exe
_シェル)を使用しています。
しかし、Windowsは確かに、その時代のプログラムとの互換性を維持しようと懸命に努力しています。そのため、Windows 8(またはそのようなもの)までは、拡張子が長いすべてのファイルには、名前自体とともに、拡張子が切り捨てられたエイリアスがあります。
_dir /x
_を実行すると、MS-の場合と同様に、各ファイルに「短い名前」が割り当てられ、8 +3文字に制限されていることがわかります。 DOSおよび16ビットWindows。
これらの名前は、たとえば、ユーザーがWindows 95にアップグレードし、元々Windows 3.1用に作成されたプログラムを介してファイルにアクセスしたい場合に使用します。したがって、16ビットプログラムを実行してもクラッシュせず、単に_C:\PROGRA~1
_および_C:\MYDOCU~1\CALENDAR.TXT
_および_C:\Program Files
_の代わりに_C:\My Documents\Calendar.txt
_。
(はい、一部の人々は実際にWindows XP/Vistaの時代でも古い16ビットソフトウェアを使用していました...しかし、Windows8はデフォルトで「短い名前」をオフにしていると確信しています。これが@EBGreenがない理由かもしれません'同じ'問題が表示されない '...)
考慮すべきもう1つのことは、古いWindowsシェル_cmd.exe
_が、それ自体でかなりの数の癖と互換性の修正を増やしたことです。たとえば、MS-DOSがファイル名を照合する方法により、_dir .txt
_は、意図的ではありませんが、_dir *.txt
_と同じ意味でした。しかし、人々は短い構文に慣れており、Windowsオペレーティングシステム自体が_.txt
_をワイルドカードとして扱わなくなったとしても、_cmd.exe
_ まだその構文を受け入れます 。 (dir
コマンドはそれ自体がプログラムではありませんが、シェルに組み込まれています。)
(同様に、リンクされた記事では、別のワイルドカードの癖が説明されています– Windowsファイル名にはno拡張子を付けることができますが、人々は実際には_*.*
_と入力することに慣れています。 _*
_と同じことを意味し、唯一のドットは無視されます。)
なぜそれがそのように機能するのか私には言えません。それはかなり奇妙です。私が言えることは、Powershell(マシン上にあるはずです)が期待どおりに機能するということです。 PowerShellの場合:
PS I:\temp\test> ls
Directory: I:\temp\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 10/13/2014 9:29 AM 3 bar.txt
-a--- 10/13/2014 9:29 AM 3 bar.txt2
-a--- 10/13/2014 9:29 AM 3 foo.txt
-a--- 10/13/2014 9:29 AM 3 foo.txt2
PS I:\temp\test> ls *.txt
Directory: I:\temp\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 10/13/2014 9:29 AM 3 bar.txt
-a--- 10/13/2014 9:29 AM 3 foo.txt
grawityは、動作が短いファイル名に起因することを正しく識別しました。ファイルマスクは、長い名前と短い名前の両方と比較されます。
ワイルドカードをファイル名と照合する方法の完全なルールは、 Windows RENAMEコマンドはどのように解釈するか)の "sourceMask"セクションにあります。ワイルドカード?
FINDSTRにパイプすることにより、目的のDIR結果を取得できます。
dir *.txt* | findstr /vrix "[0-9].*\.txt[^.][^.]*"