トップページ > Windows > 2011年06月14日 > hlsr0Yqw

書き込み順位&時間帯一覧

4 位/458 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000002120100006



使用した名前一覧書き込んだスレッド一覧
名無し~3.EXE
Windows PowerShell 2.0 Part2

書き込みレス一覧

Windows PowerShell 2.0 Part2
571 :名無し~3.EXE[sage]:2011/06/14(火) 15:24:39.19 ID:hlsr0Yqw
ドラッグ&ドロップで処理しようと思って下のサイト見ながらレジストリいじったんですが、、、

http://blogs.wankuma.com/mutaguchi/archive/2006/06/23/31196.aspx

半角でスプリットされた配列を半角スペースで連結して、最後に余計な半角を除去して
$oldpath2 = ''
foreach($x in $oldpath){
$oldpath2 += $x + ' ';
}
$oldpath2 = $oldpath2 -replace " $"

このoldpath2をtest-pathしてもFailになってしまう。で調べていくうちファイル名に"[]"が使われると失敗することがわかりました。

結局、
$oldpath2 = $oldpath2 -replace "\[", "``["
$oldpath2 = $oldpath2 -replace "\]", "``]"

を入れてやるとうまく動作するんですが、\とか`とか使うのはparseのときだけじゃなく、
OSから渡されたファイルパスの文字列であっても、[]に対しては`[, `]としないといけないんでしょーか?

Windows PowerShell 2.0 Part2
572 :名無し~3.EXE[sage]:2011/06/14(火) 15:28:29.65 ID:hlsr0Yqw

ちなみに上のサイトのレジストリ
@="\"C:\\Program Files\\Windows PowerShell\\v1.0\\powershell.exe\" -NoLogo \"%1\" %*"
は最後ミスってるようです。

%x\"

で正常に動くようになりました。
あと、そのサイトのPSスクリプトはスプリットされた文字列を半角スペースでつなぐか、何もせず終了するかで
test-pathを使ってますので、[]を含むパスの場合、常に最後に余計な半角スペースを追加してしまうはずです。
Windows PowerShell 2.0 Part2
573 :名無し~3.EXE[sage]:2011/06/14(火) 16:48:42.77 ID:hlsr0Yqw
誤 %x\"
正 %*\"

でした

Windows PowerShell 2.0 Part2
575 :名無し~3.EXE[sage]:2011/06/14(火) 17:52:25.07 ID:hlsr0Yqw
test-pathというのは比較的明確だと思ったので書きましたが他のコマンド(ren-itemとか)でも軒並み駄目です。
ただ、renなんかだと第2引数のdestinationは`[,`]に変換しなくともOKです。変換すると`[ `] の入ったファイルができてしまいます。
あと、[]に関してはまだ引数としてPowerShellに手渡せてるのですが、パスに()が入ると、$argsにすら展開されてないようで、
コマンドラインの処理に移る前に落ちてしまいます。
Windows PowerShell 2.0 Part2
576 :名無し~3.EXE[sage]:2011/06/14(火) 17:56:30.68 ID:hlsr0Yqw
ちょっと紛らわしいので、、、
例えばファイル名[aaa]を[bbb]に変換したい場合

ren-item `[aaa`] [bbb]

で正しく変換できるってことです。

ren-item `[aaa`] `[bbb`]

とすると、`[bbb`]というファイルができあがってしまうんです
Windows PowerShell 2.0 Part2
577 :名無し~3.EXE[sage]:2011/06/14(火) 19:00:02.80 ID:hlsr0Yqw
>パスに()が入ると、$argsにすら展開されてないようで、
>コマンドラインの処理に移る前に落ちてしまいます。

親ディレクトリを abc(Memories)
ファイル名 xyz.jpg
をドロップしたときのエラーです。尚、レジストリは
@="\"C:\\Program Files\\Windows PowerShell\\v1.0\\powershell.exe\" -NoExit -NoLogo \"%1\" %*"\
として、終了しないようにしています。

用語 'Memories' は、コマンドレット、関数、スクリプト ファイル、または操作可能な
プログラムの名前として認識されません。名前が正しく記述されていることを確認し、
パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください

発生場所 行:1 文字:80
+ E:\Users\nanashi3.exe\Documents\WindowsPowerShell\test.ps1 J:\Pics\abc(Memori
es <<<< )\xyz.jpg
+ CategoryInfo : ObjectNotFound: (Memories:String) []、CommandNotF
oundException
+ FullyQualifiedErrorId : CommandNotFoundException


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。