私が誤って見つけたのは、次のような場合です。
dir C:\
ルートで、C:ドライブの直接の子であるファイルのリストを取得します。
ただし、私が行う場合:
dir C:
どこにあるのかさえわからない膨大な数のファイル(DLL、EXE、CPLなど)のリストが表示されます。
これがなぜ起こるのか、そしてこのリストはどこから来るのか知っていますか?
DIR location
を指定すると、場所のコンテンツが表示されます。
DIR
コマンドを含む多くのコマンドでC:
を指定すると、Cドライブを参照し、現在のディレクトリを参照します。現在のディレクトリを表示するには、次のように入力します。
c:
cd
cd
コマンドは、通常、現在のディレクトリを変更するために使用されます。ただし、MS-DOS(および最近のMicrosoft Windowsを含むがUnixは含まない同様のオペレーティングシステム)では、cd
を単独で実行すると、現在のディレクトリが表示されます。
おそらく、cd
コマンドを使用していない場合、現在のディレクトリはおそらくオペレーティングシステムがインストールされているディレクトリです。 (少なくとも、これはMicrosoft Windowsシステムでは一般的な動作です。)
あなたはこれを行うことができます:
cd "C:\Program Files"
cd
dir c:
C:\Program Files
の内容が表示されます
同様に、copy C:*.*
のように実行すると、現在のディレクトリのすべてのコンテンツがコピーされます。
C:\
を指定すると、バックスラッシュは「トップレベル」ディレクトリとも呼ばれる「ルート」ディレクトリを示します。これは、現在のディレクトリと同じ場合も、そうでない場合もあります。
DIR \
だけを指定すると、現在のドライブが想定されます。 (C:
またはD:
のようなものをコマンド全体として(それ自体が1行で)入力して、「現在のドライブ」と見なされるドライブを変更できます。)DIR
を指定するだけの場合の場合、現在のドライブと現在のディレクトリが想定されます。
TL; DR-dir C:
は、常に一覧表示されるC:
とは対照的に、dir C:\
上の現在のディレクトリを一覧表示します。 \
のC:
ルート。
長い話...コマンドラインプロンプトでは、cmd
はセッション中にアクセスした各ドライブの現在のディレクトリを記憶しています。
現在のドライブ以外のドライブX:
上の現在のディレクトリはcd X:\etc
で設定できます(現在のドライブを/d
に変更するX:
スイッチなしで)。はcd X:
によって返されます(\
なし)-両方ともcd /?
ヘルプに記載されています。
「CDドライブ:」と入力して、指定したドライブの現在のディレクトリを表示します。
/ Dスイッチを使用して、現在のドライブを変更しますに加えてドライブの現在のディレクトリを変更します。
この引用を含む背景については、 各ドライブに独自の現在のディレクトリがあるのはなぜですか? を参照してください。
各ドライブの現在のディレクトリを記憶することは、[n.b。 DOS]、少なくともバッチファイル用ですが、Win32にはドライブごとの現在のディレクトリという概念は実際にはありません。 Win32では、現在のディレクトリのみです。各ドライブが独自の現在のディレクトリを持っているように見えるのは、奇妙な環境変数を使用して、各ドライブが独自の現在のディレクトリを持っているバッチファイルの錯覚を作成するcmd.exeによる偽造です。
リンクされた投稿で参照されているstrange environment variables
これらの奇妙な= C:環境変数とは は、cmdプロンプトでset ""
を使用して表示できます。次に例を示します。
C:\temp>cd X:\etc
C:\temp>cd C:
C:\temp
C:\temp>cd X:
X:\etc
C:\temp>set ""
=C:=C:\temp
=X:=X:\etc
ALLUSERSPROFILE=C:\ProgramData
[...]
2つの異なるディレクトリを取得する理由は簡単です。 \
が違いです。
dir C:\
は、\
にあるC
ドライブのディレクトリリストを要求しています。 \
はルートフォルダです。
dir C:
は、ディレクトリのリストを要求していますare(またはドライブを変更した場合は最後)
C
ドライブを使用していて、dir
と入力してenter
を押すと、dir C:
と同じ内容が表示されます。別のドライブを使用していて、C:
と入力してC
ドライブに戻すと、dir C:
と入力したときに表示されたディレクトリに移動します。
これはStackOverflowではないので、せいぜいコメントにすぎないはずですが、適合しません。
.NET Framework(おそらくWin32経由)は現在のディレクトリを反映しますfor現在のドライブ:
> (curdir)
C:\Utils\DotLisp\My Stuff
> (.FullName (DirectoryInfo. "C:"))
C:\Utils\DotLisp\My Stuff
> (.FullName (DirectoryInfo. "G:"))
G:\
> (set (curdir) "G:/Temp/Emails")
G:/Temp/Emails
> (curdir)
G:\Temp\Emails
> (.FullName (DirectoryInfo. "G:"))
G:\Temp\Emails
> (.FullName (DirectoryInfo. "C:"))
C:\
2つのコマンドを一緒に実行しています。 c:
自体は、C:ドライブのPREVIOUS LOCATIONに変更するためのコマンドです。したがって、d:
またはe:
を使用してドライブを変更する前の場所を保持します。 dir
は、ディレクトリの内容を一覧表示するために使用されるコマンドです。
したがって、基本的には、別のドライブ上にある場合でも、C:ドライブ上の以前のフォルダーの内容をリストしています。