全体表示

[ リスト ]

Windows Power Shellをいろいろ触ってみて、結構おもしろいことに気づいてきた。

それまでは直接Power Shellコマンドライン上で実行するばっかりだったんだけど、
スクリプトファイルを作ってそれを実行させるのもやってみようと思ってやってみた。

・・・が、上手くいかないw。

作成したのは test.ps1 というファイル。
中身は非常に簡単。
$a = Get-ChildItem $args[0]
Write-Host $a
引数で指定したフォルダ上に存在するフォルダとファイルの一覧を画面に出力するだけ。

PowerShell上で実行したコマンドは以下。
PS >"C:\Documents and Settings\Administrator\デスクトップ\test.ps1" C:\

スクリプトファイルが置いてあるパスにスペースを含むフォルダがあるので二重引用符で囲んでいる。
だが、これを実行するとエラーが出力されてしまう。
式またはステートメントのトークン 'C:\'を使用できません。

ちなみにスペースのないパスにスクリプトファイルを置いて実行すると上手くいく。
PS >C:\Work\test.ps1 C:\

PowerShellではスペースを含むパスを囲うのは二重引用符じゃないのか?
なんて思ってTechNetで調べてみた。
Windows PowerShell の機能(Invoke-Expression コマンドレットの使用)

Invoke-Expression、もしくは & を使用すればいいかもしれないというわけで、実行してみた。
Invoke-Expression "C:\Documents and Settings\Administrator\デスクトップ\test.ps1 C:\
なぜかこれも上手くいかない。(パスにスペースがなければ大丈夫。)

だが、&で試すと上手くいった。
& "C:\Documents and Settings\Administrator\デスクトップ\test.ps1" C:\

TechNetのページにはどれでも使えるみたいな書き方してあるのになあ。
なんでだろ?


まあ、とりあえずは & を使って使うようにするか。

この記事に

閉じる コメント(4)

顔アイコン

TechNet の説明が間違ってますね
Invoke-Expression "c:\my scripts\test script.ps1"
はプロンプト上で
PS > c:\my scripts\test script.ps1
としたのと同義です(構文エラー)

文字列は引用符で括らないと文字列として扱われず、エラーになります(式の先頭にコマンド名や & . がある時以外)
`を使えばスペースをクォートできるので、単なる文字列ではなくコマンド(スクリプトファイル名)の識別子として解釈されます
PS > c:\my` scripts\test` script.ps1 削除

2008/7/30(水) 午前 11:30 [ S.K. ] 返信する

顔アイコン

S.K.さん、ありがとうございます。参考になります。
やっぱりTechNetの説明がおかしいんですよね?w

`を使ってやってみたら確かに正しく動作するのを確認しました。
ただ、スペースが多いと・・・面倒ですねw。
(そもそもフォルダ名やファイル名にスペースを使うこと自体が個人的には問題だと思ってるので、
自分が作成する名称としてはスペースは使いませんけどw。)

2008/8/2(土) 午後 5:11 [ yottun8 ] 返信する

顔アイコン

なるほど、おかげさまで私も解決できました。 削除

2012/8/15(水) 午後 2:38 [ JOHN-PC\JOHN ] 返信する

顔アイコン

早とちりしました。だめでした。タスクからは引数に & ".." としてもコマンド入力とちがって空白含むパスは動かなかったです。つかれました。あきらめます。 削除

2012/8/15(水) 午後 3:01 [ JOHN-PC\JOHN ] 返信する

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

開く トラックバック(1)


.


みんなの更新記事