同じコマンドを与えたPowerShellがcmd.exeと異なる動作をするのはなぜですか?


0

この問題はおそらく2つのプログラムの動作が異なることに気付いたシナリオで最もよく説明されています。

私は自分のLinux時代から古いバックアップを私のハードドライブにという名前のファイルを含んでいました コン MSDNが述べているように コン 予約済みのデバイス名であり、ファイルには使用できません。

ファイル名に次の予約済みデバイス名を使用しないでください。

CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、およびLPT9

だから私はファイルを削除するのに問題があったが、私はそれを見つけたように適切な名前でエスケープする スーパーユーザーの回答からのこのコマンド 削除できました。

del "\\.\F:\Movies\Con Man\Con.Man.2018.720p.WEBRip.x264-[YTS.AM].mp4"

最初に、私はPowerShellを介して与えられたコマンドでファイルを削除しようとしました。 ディレクトリまたはドライブが存在しないというエラーが表示されました。 のみ C:\ WINDOWS \ System32 \ cmd.exe ファイルを削除できました。 両方のシェルを管理者権限で実行しました。

だから、この時点から私は単に知りたかったのです。なぜ彼らは異なった振る舞いをするのですか? PowerShellには別の種類の許可レベルがありますか。それとも、何らかの特別なサンドボックスで実行されていますか?


1
待ってください - あなたの例のファイルは実際には名前が付けられていません con、 それは...ですか?
grawity

はい、そうでした。私が引用したコマンドは、単にconという名前のファイルに対するものではありませんでしたが、conという名前のファイル(およびconのみ)に対して使用したもので、cmd.exeを介して機能します。 Linux上で私のソフトウェア開発者時代に現れたのは、自動生成されたファイルだったと思います。私は今それがどのように具体的に現れたのかわかりません。
narranoid

回答:


0

どちらでもない。

コマンドプロンプトは、特殊なデバイスと通信する唯一の方法がそれらのデバイス名を使用することであった古いMS-DOSからの続きです:PRN、CON、その他...

これは基本的に、デバイスによって呼び出された後にピリオドが続くファイルは、Windowsでは違法であることを意味します。 MS-DOSには回避策がありますが、Powershellにはありません。これは基本的にあなたがWindowsでこの違法なファイル名に違反したファイルで作業することができないことを意味します。

そうです、その理由でそれらは非常に異なっています。できることだけでなく、構文全体が異なります。 PowerShellを使用してコマンドプロンプトでできることを実行できますが、その逆はできません。


私はPowerShellの強力な機能を知っていますが、私の場合は両方に使用できるコマンドを使用しましたが、PowerShellにはまだ問題がありました。最初にPowerShellからRemove-Itemも試しましたが、アクセス番号エラーが発生しました。
narranoid

そして、パス自体は特別なものであり、powershellは通常通りファイルにアクセスできるので、特別なアクセスパスを使用する必要はなく、また機能するわけでもないことを説明しました。
LPChip

しかし、通常のパス構文で削除しようとした後、特別なアクセスパス構文の調査を始めました。そしてそれはPowerShellでもうまくいきませんでした。
narranoid

もう少しテストをしました、そしてそれは確かにPowerShellがファイルに到達することができないようです。 Powershellは\\。\などの代替ストリームを理解しないので、それによっても機能しません。しかし、あなたは尋ねました、彼らは違いますか、そうです、彼らは違います。しかし、私は自分のした間違いを修正するために答えを編集します。
LPChip

うわー、努力をありがとう!それは今私の質問に対するかなりまともな答えです。
narranoid
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.