アカウント名:
パスワード:
普通のプログラマなら、実ディレクトリ名なんて飾りだって知ってるだろ…。決め打ちするなよ...
え゛・エクスプローラからコマンドプロンプトにドラッグ&ドロップ・接頭文字打ってTABキーとか使うんじゃないの?
#それより、エクスプローラで選択したファイルをCMD.EXE(orバッチファイル)にドラッグ&ドロップした時、ファイル名に全角スペースがあると勝手に分割する仕様は治ったのでしょうか?#半角スペースだと""で括ってくれるんですけどねぇw
ファイルをSHIFT-右クリック→パスとして保存も便利ですよね。最も、VistaではD&Dできないので、この回避策しかなかったらしいですが。
>・エクスプローラからコマンドプロンプトにドラッグ&ドロップ
Vista以降ではこの方法は使えなくなっています。代わりにファイルやフォルダのフルパス名を取得する(Windows Vista編) [atmarkit.co.jp]というような方法が用意されているそうです。
「Vista以降では」ではなく「Vistaでは」です。クレームが多かったのか、Windows 7では再びD&Dできるようになりました。
CUIでのコマンドのArg受け取りって、文字列長の制限ってありませんでしたっけ?
コマンド プロンプト (Cmd.exe) のコマンド ライン文字列の制限 [microsoft.com]によれば、
だそうです。
x86 と x64 が対になってる言い方も微妙ですね。 amd64も残ってるし。
kmraさんの日記、およびコメント [srad.jp]をドゾ
>Intelに配慮してMicrosoftが付けた政治的な名前がx64
リンク先の日記のコメントに描いてあるように、政治的にはそうなのかも知れないけど、個人的にはハイフンが入っていなくてよかったと思う。ハイフンが入っていると多くのプログラミング言語では識別子としては使えないので。
ついでだから、聞いちゃう。経緯を知っている人いたら教えてたもれ。
(Windows|MS-DOS)のパス区切り文字がバックスラだったり、*nixで言うところのルートディレクトリーがなくて、各ボリュームの一番上までしかドットドットであがって行けなかったり、コマンドオプションがスラッシュだったり、変数を%で括ったりする、これら独自性は、何に由来しているの?
原因を作った先行するOSやその仕様の(作成者|メーカー|ベンダー)や、Windowsに持ち込んだ奴らこそ業火に投げ込まれるべきだと、経緯を知らない俺は思うんだが、きっと深い理由があるんだろうから、良ければ雑談ネタで教えてください。
MSDOSは2.xで階層ディレクトリだけでなくあちこちUNIXのマネをしているのですが、なぜか中途半端な真似なんで、困ります。各ドライブのルートディレクトリにだけは .がないとか。FATファイルシステムがバイトストリームなのも、FCBから整数のファイルハンドルを使うI/OにしたのもUNIXの真似。
ドライブごとのファイルシステムになっているのは、当時MSDOSがFDDシステムで、システムFDすら差し替えられることがあったからでしょう。UNIXはHDDがある前提のOSだからHDD上にルートディレクトリを置いてリムーバブルディスクをサブディレクトリにマウントするという方策が使えましたが。
Windwos95で、デスクトップの中にマイコンピュータがあってその中に各ドライブがあってCドライブの中の・・・・の中にまたデスクトップがあるというわけわかんない世界にしてしまってもう・・・。
UNIXの慣習はスペース区切りで コマンド名 -オプション -オプション=XXX ファイル名・・・・
ですが、当時はまだそれほど強い勢力ではなくて、MSDOSでは違う方式、
コマンド名/オプション/オプション=XX と区切りの空白を入れずに/でオプションを区切る書き方をしたかったので、パス名の区切りが バックスラッシュ になっちゃった、と当時は言われていました。あくまでもcommand.comでの話で、APIに渡すパス名は/区切りでも¥区切りでもどっちでも動いたはず
結局、UNIXの真似はしたいがそっくりそのまま真似はしたくないので意地でちょっと変えたとかかもしれません。メインメモリ64KBのマシンとかがざらに有った時代なので技術的限界でUNIXそっくりには出来なかったというのもあるでしょう。ワイルドカード解釈方式が根本的に違うのが一番納得いかない。
「unixenと仕様が異なる」と「(一般性のない)独自仕様である」は別の事象ですよね。unixの系譜がOS世界の皇統であるわけでもないですし。結果として現時点で大きな勢力となったものと異なる仕様であることを当時の人に非を求めるのはあまりにも無理筋では。# むしろ当時としての一大勢力に合わせたといってもいいのか?
(ボリュームというより)ドライブからパスを開始するなどの、いくつかの仕様はCP/Mあたりを継承したものかと。当時の状況としてはCP/M~MS-DOS~Windowsと仕様に連続性を持たせる流れは非常に自然ですし。
なお、パス区切り文字でスラッシュが使えないのはコマンド
NT4時代はC:\WINNT\Profilesだったし、Win9xはマルチユーザー設定やIE4のインストールの有無で場所が変わったりしてたので、さすがにそれを決め打ちしてた人はなんども痛い目にあって学習済みだと思います。
大丈夫です。My Documents 決め打ちのアプリ対策が組み込まれている程度に、いまだに直書きしているアホアプリが存在します。 # Documents and Settings とかも入ってますね。
C:\ すら直書きするアプリはさすがに減ったと思いたいところですが……。
そのまえにだなぁ、ファイル名フォルダ名にスペースを許可した輩が最初に...!
フォルダ名やファイル名にスペースが入っていたとして、いったい何がいけないって言うんですか?どんなタコなプログラムで問題になるの?
お宝映像!!!.jpg .exe
「映像」なのに JPEG かよっ! 動画じゃないのかよっ!
どんなタコなプログラムで
WC以後、「タコな」は完全な [wikimedia.org]の比喩表現になりました。 うそです。
スペース入りのファイル名が鬼門なのはUNIX系でも一緒だし、そういう場合、find -print0 で出力して、xargs -0 で受けるのが基本じゃないかな。
find ... -print0grep --null ...sort -z ...xargs -0 ...
オプション統一してくれや……。
スペース入りを考慮してプログラムを書くようになるだろ?PCの世界は、現実世界のメタファーとなるようになるべく自然に名前を付けたりしたいからスペース入れるなとか、カンマ入れるな、日本語入れるなってのは甘えだと思います。それらをクリアして、しかもスマートに実装するのが腕。
自分の書いたプログラムがタコなのは仕方ないが、自分の腕と関係ない所でコケるのは勘弁して欲しい。
>"Program Files"にスペースが入っているのは、マイクロソフトの開発者への愛情の現われだよ。プログラマにスペースの扱いを教えるのに、これほど良い物はなかなか無いと思いますよ。これが無ければ未だに「利用するフォルダの名称にスペースは入れないで下さい」なんてのが多々あったかも知れない。
USとJPのWindowsはProgram Filesなんですが、他言語だとスペース無しの別の言葉に翻訳されてたりするんすよ。Programmieとかなんとか(忘れた)今時はもうこういう話でエラーになるプログラムもめったに無いですが、ちょっと前だとたまにありました。プログラム本体は大丈夫でも、インストール中に走らせるおまけのスクリプト中でおもいっきりProgram Files指定しちゃってたり。
はい、チェコ語のWindowsでDocument and Settingsの綴りが違っていて死にました。ごめんなさい。
オレアプリ専用にDocument and Settingsを作ってもらいました。
他にもAdministratorも別の綴りだったりするので要注意ですね。
# 定数&API使おうねー
これのlpApplicationNameの解説を読んでもなおパスにスペースが入ったほうが良いとおっしゃる? こんな複雑怪奇なことするぐらいなら「スペースは使えません」のほうが遥かにマシ。
引用符で囲えば良いだけですな。もしくは、両方の引数を使えば問題ない。
MS製品に良くある救済措置が面倒な事になってるのは良くある事ですし・・・
# ちなみに、foo.exeのargv[0]がbar.exeどころか、baz.txtになってる事もあるので注意しましょう。
dirコマンド。 [twitter.com]Windows7でも直ってません。
それ、dirコマンドじゃなくて、cdコマンドの仕様なんだと思われ。cdコマンドは取れる引数は1つのはずなので、途中の空白を名前とみなす仕様なのであろう。環境変数じゃなくて、Program Filesでやってみると解かる。(くくらない)多分、期待した動作させたいなら、"%ProgramFiles%"で実行せよ。Linuxのcdコマンドにはそんなやさしさないので、どっちもdirの動作と同じになる。
C:\Windows\system32>cd /?現在のディレクトリを変更したり、ディレクトリ名を変更したりします。CHDIR [/D] [ドライブ:][パス]CHDIR [..]CD [/D] [ドライブ:][パス]CD [..] .. 親ディレクトリに変更するときに指定します。CD ドライブ: と入力すると指定されたドライブの現在のディレクトリが表示されます。パラメータを指定しないで CD と入力すると、現在のドライブとディレクトリが表示されます。現在のディレクトリだけでなく、現在のドライブも変更するには /D オプションを使用してください。コマンド拡張機能を有効にすると、CHDIR は次のように変更されます:現在のディレクトリの文字列に入力された大文字と小文字は、ディスク上の名前と同じになるように変換されます。たとえば、ディスク上のディレクトリ名がTemp である場合、CD C:\TEMP と入力すると、現在のディレクトリは C:\Temp に設定されます。CHDIR コマンドは空白を区切り文字として扱わなくなるため、空白文字を含むサブディレクトリ名を引用符で囲まなくても、CD を実行してにそのサブディレクトリに移動できるようになります。たとえば、 cd \winnt\profiles\username\programs\start menuは、次と同じです: cd "\winnt\profiles\username\programs\start menu"拡張機能が無効である場合は、こちらを入力します。
C:\Windows\system32>cd /?現在のディレクトリを変更したり、ディレクトリ名を変更したりします。
CHDIR [/D] [ドライブ:][パス]CHDIR [..]CD [/D] [ドライブ:][パス]CD [..]
.. 親ディレクトリに変更するときに指定します。
CD ドライブ: と入力すると指定されたドライブの現在のディレクトリが表示されます。パラメータを指定しないで CD と入力すると、現在のドライブとディレクトリが表示されます。
現在のディレクトリだけでなく、現在のドライブも変更するには /D オプションを使用してください。
コマンド拡張機能を有効にすると、CHDIR は次のように変更されます:
現在のディレクトリの文字列に入力された大文字と小文字は、ディスク上の名前と同じになるように変換されます。たとえば、ディスク上のディレクトリ名がTemp である場合、CD C:\TEMP と入力すると、現在のディレクトリは C:\Temp に設定されます。
CHDIR コマンドは空白を区切り文字として扱わなくなるため、空白文字を含むサブディレクトリ名を引用符で囲まなくても、CD を実行してにそのサブディレクトリに移動できるようになります。たとえば、
cd \winnt\profiles\username\programs\start menu
は、次と同じです:
cd "\winnt\profiles\username\programs\start menu"
拡張機能が無効である場合は、こちらを入力します。
むしろそろそろ MS-DOS 互換ファイル名を廃止したいなあ。うっかり *1.* とか *2.* なんて打った日にはあれもこれもヒットしてえらい目に遭う。
既に設定ひとつで廃止できるんだけど、実際やるとコケるアプリが少なくないんだ、いまだに。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家
C:\Program Files (x86) (スコア:5, おもしろおかしい)
ただ死んで終わるものではない。唯一神が地獄の業火に(以下略
Re:C:\Program Files (x86) (スコア:5, おもしろおかしい)
Re: (スコア:0)
Re:C:\Program Files (x86) (スコア:3, すばらしい洞察)
普通のプログラマなら、実ディレクトリ名なんて飾りだって知ってるだろ…。
決め打ちするなよ...
Re: (スコア:0)
ただでさえ使いづらいコマンドプロンプトが余計に使いにくくなる。
やっぱり、スペースだのカッコだのつけるのはよくないよ。
Re: (スコア:0)
え゛
・エクスプローラからコマンドプロンプトにドラッグ&ドロップ
・接頭文字打ってTABキー
とか使うんじゃないの?
#それより、エクスプローラで選択したファイルをCMD.EXE(orバッチファイル)にドラッグ&ドロップした時、ファイル名に全角スペースがあると勝手に分割する仕様は治ったのでしょうか?
#半角スペースだと""で括ってくれるんですけどねぇw
Re:C:\Program Files (x86) (スコア:2)
ファイルをSHIFT-右クリック→パスとして保存
も便利ですよね。
最も、VistaではD&Dできないので、この回避策しかなかったらしいですが。
Re:C:\Program Files (x86) (オフトピック) (スコア:1)
お忍びリネーム [digidigiday.com]を重宝していて、しかしwin7で動かなくて悲しんでいたのですが
そんな機能があったのですね。
参考になりました。
Re:C:\Program Files (x86) (スコア:1)
>・エクスプローラからコマンドプロンプトにドラッグ&ドロップ
Vista以降ではこの方法は使えなくなっています。代わりにファイルやフォルダのフルパス名を取得する(Windows Vista編) [atmarkit.co.jp]というような方法が用意されているそうです。
Re: (スコア:0)
「Vista以降では」ではなく「Vistaでは」です。
クレームが多かったのか、Windows 7では再びD&Dできるようになりました。
Re: (スコア:0)
Re: (スコア:0)
マイドキュメント(Win7だとライブラリ>ドキュメントですか)みたいなのは確かにできなくなってますね。
Re: (スコア:0)
CUIでのコマンドのArg受け取りって、文字列長の制限ってありませんでしたっけ?
Re: (スコア:0)
Re: (スコア:0)
コマンド プロンプト (Cmd.exe) のコマンド ライン文字列の制限 [microsoft.com]によれば、
だそうです。
Re:C:\Program Files (x86) (スコア:2)
x86 と x64 が対になってる言い方も微妙ですね。 amd64も残ってるし。
Re:C:\Program Files (x86) (スコア:1, 参考になる)
kmraさんの日記、およびコメント [srad.jp]をドゾ
x86-64じゃなくてよかった (スコア:1)
>Intelに配慮してMicrosoftが付けた政治的な名前がx64
リンク先の日記のコメントに描いてあるように、
政治的にはそうなのかも知れないけど、
個人的にはハイフンが入っていなくてよかったと思う。
ハイフンが入っていると多くのプログラミング言語では
識別子としては使えないので。
屍体メモ [windy.cx]
パスの区切り文字とかドライブ指定とか (スコア:2, 興味深い)
ついでだから、聞いちゃう。経緯を知っている人いたら教えてたもれ。
(Windows|MS-DOS)のパス区切り文字がバックスラだったり、*nixで言うところのルートディレクトリーがなくて、各ボリュームの一番上までしかドットドットであがって行けなかったり、コマンドオプションがスラッシュだったり、変数を%で括ったりする、これら独自性は、何に由来しているの?
原因を作った先行するOSやその仕様の(作成者|メーカー|ベンダー)や、Windowsに持ち込んだ奴らこそ業火に投げ込まれるべきだと、経緯を知らない俺は思うんだが、きっと深い理由があるんだろうから、良ければ雑談ネタで教えてください。
Re:パスの区切り文字とかドライブ指定とか (スコア:1)
MSDOSは2.xで階層ディレクトリだけでなくあちこちUNIXのマネをしているのですが、なぜか中途半端な真似なんで、困ります。各ドライブのルートディレクトリにだけは .がないとか。FATファイルシステムがバイトストリームなのも、FCBから整数のファイルハンドルを使うI/OにしたのもUNIXの真似。
ドライブごとのファイルシステムになっているのは、当時MSDOSがFDDシステムで、システムFDすら差し替えられることがあったからでしょう。UNIXはHDDがある前提のOSだからHDD上にルートディレクトリを置いてリムーバブルディスクをサブディレクトリにマウントするという方策が使えましたが。
Windwos95で、デスクトップの中にマイコンピュータがあってその中に各ドライブがあってCドライブの中の・・・・の中にまたデスクトップがあるというわけわかんない世界にしてしまってもう・・・。
UNIXの慣習はスペース区切りで コマンド名 -オプション -オプション=XXX ファイル名・・・・
ですが、当時はまだそれほど強い勢力ではなくて、MSDOSでは違う方式、
コマンド名/オプション/オプション=XX
と区切りの空白を入れずに/でオプションを区切る書き方をしたかったので、パス名の区切りが バックスラッシュ になっちゃった、と当時は言われていました。あくまでもcommand.comでの話で、APIに渡すパス名は/区切りでも¥区切りでもどっちでも動いたはず
結局、UNIXの真似はしたいがそっくりそのまま真似はしたくないので意地でちょっと変えたとかかもしれません。メインメモリ64KBのマシンとかがざらに有った時代なので技術的限界でUNIXそっくりには出来なかったというのもあるでしょう。ワイルドカード解釈方式が根本的に違うのが一番納得いかない。
Re: (スコア:0)
「unixenと仕様が異なる」と「(一般性のない)独自仕様である」は別の事象ですよね。
unixの系譜がOS世界の皇統であるわけでもないですし。
結果として現時点で大きな勢力となったものと異なる仕様であることを
当時の人に非を求めるのはあまりにも無理筋では。
# むしろ当時としての一大勢力に合わせたといってもいいのか?
(ボリュームというより)ドライブからパスを開始するなどの、いくつかの仕様はCP/Mあたりを継承したものかと。
当時の状況としてはCP/M~MS-DOS~Windowsと仕様に連続性を持たせる流れは非常に自然ですし。
なお、パス区切り文字でスラッシュが使えないのは
コマンド
Re:C:\Program Files (x86) (スコア:1, 興味深い)
Re: (スコア:0)
NT4時代はC:\WINNT\Profilesだったし、Win9xはマルチユーザー設定やIE4のインストールの有無で場所が変わったりしてたので、さすがにそれを決め打ちしてた人はなんども痛い目にあって学習済みだと思います。
Re:C:\Program Files (x86) (スコア:1)
大丈夫です。My Documents 決め打ちのアプリ対策が組み込まれている程度に、いまだに直書きしているアホアプリが存在します。
# Documents and Settings とかも入ってますね。
C:\ すら直書きするアプリはさすがに減ったと思いたいところですが……。
Re:C:\Program Files (x86) (スコア:1)
(OSを導入したドライブのルートに、PROGRAM というディレクトリを作成して再起動すると……)
人柱さん、いませんか?
notice : I ignore an anonymous contribution.
Re: (スコア:0)
そのまえにだなぁ、
ファイル名フォルダ名にスペースを許可した輩が最初に...!
Re:C:\Program Files (x86) (スコア:2, おもしろおかしい)
フォルダ名やファイル名にスペースが入っていたとして、いったい何がいけないって言うんですか?
どんなタコなプログラムで問題になるの?
Re:C:\Program Files (x86) (スコア:4, おもしろおかしい)
だまされたっ! (スコア:1, おもしろおかしい)
「映像」なのに JPEG かよっ! 動画じゃないのかよっ!
Re:C:\Program Files (x86) (スコア:4, おもしろおかしい)
どんなタコなプログラムで
WC以後、「タコな」は完全な [wikimedia.org]の比喩表現になりました。 うそです。
Re:C:\Program Files (x86) (スコア:1)
Re:C:\Program Files (x86) (スコア:1)
スペース入りのファイル名が鬼門なのはUNIX系でも一緒だし、そういう場合、
find -print0 で出力して、xargs -0 で受けるのが基本じゃないかな。
Re:C:\Program Files (x86) (スコア:1)
find ... -print0
grep --null ...
sort -z ...
xargs -0 ...
オプション統一してくれや……。
Re: (スコア:0)
スペース入りを考慮してプログラムを書くようになるだろ?
PCの世界は、現実世界のメタファーとなるように
なるべく自然に名前を付けたりしたいから
スペース入れるなとか、カンマ入れるな、日本語入れるなってのは
甘えだと思います。
それらをクリアして、しかもスマートに実装するのが腕。
Re:C:\Program Files (x86) (スコア:1)
自分の書いたプログラムがタコなのは仕方ないが、自分の腕と関係ない所でコケるのは勘弁して欲しい。
署名スパムがウザい?アカウント作って非表示に設定すればスッキリさ。
Re: (スコア:0)
Re:C:\Program Files (x86) (スコア:2, すばらしい洞察)
>"Program Files"にスペースが入っているのは、マイクロソフトの開発者への愛情の現われだよ。
プログラマにスペースの扱いを教えるのに、これほど良い物はなかなか無いと思いますよ。
これが無ければ未だに「利用するフォルダの名称にスペースは入れないで下さい」なんてのが
多々あったかも知れない。
Re:C:\Program Files (x86) (スコア:4, 参考になる)
USとJPのWindowsはProgram Filesなんですが、
他言語だとスペース無しの別の言葉に翻訳されてたりするんすよ。Programmieとかなんとか(忘れた)
今時はもうこういう話でエラーになるプログラムもめったに無いですが、ちょっと前だとたまにありました。
プログラム本体は大丈夫でも、インストール中に走らせるおまけのスクリプト中でおもいっきりProgram Files指定しちゃってたり。
Re:C:\Program Files (x86) (スコア:1, 興味深い)
はい、チェコ語のWindowsでDocument and Settingsの綴りが違っていて死にました。
ごめんなさい。
オレアプリ専用にDocument and Settingsを作ってもらいました。
Re:C:\Program Files (x86) (スコア:1)
他にもAdministratorも別の綴りだったりするので要注意ですね。
# 定数&API使おうねー
Re:C:\Program Files (x86) (スコア:1, 興味深い)
これのlpApplicationNameの解説を読んでもなおパスにスペースが入ったほうが良いとおっしゃる?
こんな複雑怪奇なことするぐらいなら「スペースは使えません」のほうが遥かにマシ。
Re:C:\Program Files (x86) (スコア:1)
引用符で囲えば良いだけですな。
もしくは、両方の引数を使えば問題ない。
MS製品に良くある救済措置が面倒な事になってるのは良くある事ですし・・・
# ちなみに、foo.exeのargv[0]がbar.exeどころか、baz.txtになってる事もあるので注意しましょう。
Re: (スコア:0)
Re: (スコア:0)
Re: (スコア:0)
dirコマンド。 [twitter.com]
Windows7でも直ってません。
Re:C:\Program Files (x86) (スコア:1)
習得した(と思われる)Program Files=Progra~1(前6文字+チルダ+数字)とすればいいじゃなーい
と頭の中で簡単に変換出来るでしょ(笑)。
XPではCDコマンドもDIRコマンドも、上記ので問題無いね。
Windows Server 2008でもコレでいけるなぁ。
や、8.3形式に縛られるは馬鹿らしいってのは分かるんだけど、結局8.3形式が一番安全だという。
#流石に直ったけど、Windows2000位までは出来るだけ8.3で名前を付けるクセが抜けなかったなぁ。
Re: (スコア:0)
それ、dirコマンドじゃなくて、cdコマンドの仕様なんだと思われ。
cdコマンドは取れる引数は1つのはずなので、途中の空白を名前とみなす仕様なのであろう。
環境変数じゃなくて、Program Filesでやってみると解かる。(くくらない)
多分、期待した動作させたいなら、"%ProgramFiles%"で実行せよ。
Linuxのcdコマンドにはそんなやさしさないので、どっちもdirの動作と同じになる。
Re:C:\Program Files (x86) (スコア:1)
やなぎ
字面じゃなく論旨を読もう。モデレートはそれからだ
Re: (スコア:0)
むしろそろそろ MS-DOS 互換ファイル名を廃止したいなあ。
うっかり *1.* とか *2.* なんて打った日にはあれもこれもヒットしてえらい目に遭う。
既に設定ひとつで廃止できるんだけど、実際やるとコケるアプリが少なくないんだ、いまだに。
Re: (スコア:0)
とか。