• ベストアンサー

powershellで引数受け取り時にエラーになる

powershellで下の様に引数を取得し変数に格納したいのですが、 $test = "$args" ファイル名に「&」などの文字があると読み込めないとエラーがでます。 そこで、どんな文字があっても単純な文字列として 読み込むにはどうしたら良いのでしょうか。 但し、ファイル名を手動で変更してから取り込む事はできません。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

質問のエラーは、powershellのスクリプトを、引数付きで呼び出したときに起こるものを指しているのですよね? エラーの原因は、スクリプト起動時、パラメータとして渡すファイル名に、予約されたキャラクター"&"を使っているからでしょう。 スクリプトファイル名がsample.ps1として、渡したいファイル名がaaa&bbbのとき PS>.\sample.ps1 aaa&bbb ではなく、 PS>.\sample.ps1 "aaa&bbb" のようにパラメータのファイル名を「"」で囲むとうまく渡ります。

omorinoya35234
質問者

補足

すみません。書いていない事がありました。リンクを参考に、 http://www.wmifun.net/step/wps_03.html 作成したps1ファイルのショートカットを作成し、そのショートカットにファイルをD&Dをして実行しています。 そのれもあって"$args"としていたのですが、駄目なのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【powershell起動時の引数の受け渡しについて】

    【powershell起動時の引数の受け渡しについて】 関連付けが完了していることが前提として… powershell上でps1ファイルを起動した場合、当然実行可能ですし 引数も受け取れるのですが、cmdプロンプトで直接起動した場合、 実行は可能なのですが、引数がうまく渡せません。 これはしょうがないのでしょうか。 【実行OK 引数受け取れる】 PS C:\test> ./hoge.ps1 xxx yyy 【実行OK 引数受け取れない】 C:\test> hoge.ps1 xxx yyy hoge.ps1の引数指定 Param([string] $a1,[string] $a2)

  • powershellの変数の扱い方

    cmdshell(bat)からpowershell(ps1)に移行しようと勉強しているものです。 ごく初歩的なことだと思うのですが、わからないので質問します。 環境はWindows8.1、PowerShell ISEを使用しています。 下記のように引数を実行ファイルに渡すと、渡したファイルが操作されます。 ------------------------------- D:\...\abc.exe $Args ------------------------------- これであれば正常に機能するのですが、 ------------------------------- $abc = "D:\...\abc.exe" $abc $Args ------------------------------- とするとエラーになってしまいます。 これは一体なぜなのでしょうか。 解決方法をご教授願いたいと思います。よろしくお願いします。

  • Windows PowerShell ファイル名変

    Windows PowerShell で以下のようなファイル名変更を行いたいのですが、 可能でしょうか? 元ファイル名  201710131111_TEST1_ドラマ.mp4  201710142222_TEST1_バラエティ.mp4  201710152323_TEST1_報道.mp4 置換後ファイル名  201710131111_TEST2.mp4  201710142222_TEST2.mp4  201710152323_TEST2.mp4 置換前ファイル名の日付時間と番組種はどんな文字列になるかは不明という前提で、 Windows PowerShell などのコマンドで動く物で実現したいです。

  • Powershellのparamについて

    Powershellについて質問いたします。 自分で確かめた限りですが、paramとargsは同時に使用できないのでしょうか? 使用の仕方は $args.length param($引数1,$引数2.$引数3) といった形で、paramの前にargs定義があると下記のエラーがでて 用語 'param' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 逆にparamがargsの前にあると値が取れていないみたいです。(args.lengthの値が0) Paramでlengthのようなことができればいいのですが。

  • プログラム実行時に引数"<"を指定したい。

    自分でも色々調べたのですが、手に負えなかったので質問させていただきます。何度も質問する形になって申し訳ないです。 今取り組んでいる課題の1つに、プログラム実行時に引数として"<"と"ABC"(ABCはファイル名)を指定するとABCに書かれたスクリプトを実行する。というものがあります。 myprogram < scriptfile(←のような感じです) それで、第1引数が"<"なら第2引数のファイルを実行する。というようにしようと思ったのですが、Argv[1]に"<"が格納されません。 引数に"<"を指定すると別の処理をするらしいことは調べたのでわかったのですが、どうにか"<"を格納できないでしょうか?(つまりは、引数が"<"の時とそうでない時で分岐できるようにしたいのです) あと、スクリプトのファイル名もArgv[2]に格納できないんですが、第2引数に指定された文字列はどこへ行ってしまったんでしょうか? 何度もすいませんがよろしくお願いいたします。

  • PowerShellからPowerShellを呼び出す方法

    PowerShellからPowerShellを呼び出す方法 次のバッチファイルと同等の事をPowerShellで行う方法を教えて下さい。 下記のような非常に簡易的なバッチファイルがあるとします。 ■ aaa.bat ■ echo test ■ aaa.bat ■ ■ bbb.bat ■ aaa.bat > aaa.log ■ bbb.bat ■ ■ コマンドプロンプト ■ cmd> aaa.bat ・・・ 下に「test」と出力される test cmd> bbb.bat ・・・ ファイルaaa.logに「test」と出力される ■ コマンドプロンプト ■ 同じ事をPowerShellでするとすれば ■ aaa.ps1 ■ echo "test" ■ aaa.ps1 ■ ■ PowerShellの画面から ■ PS > ./aaa.ps1 ・・・ 下に「test」と出力される test PS > ./bbb.ps1 ・・・ ファイルaaa.logに「test」と出力される ■ PowerShellの画面から ■ この時の「bbb.ps1」はどのようになりますか?

  • 引数の渡し方

    パッケージ内のプロシージャで 引数を渡し、その引数を検索条件として 使用したいのですが、エラーが出てしまいます。 引数に数値を与えると動くのですが 文字列を与えるとエラーが出ます。 エラーの内容は(引数として与えた文字列)は、 無効な識別子ですと表示されます。 おそらくシングルクォーテーションが 渡っていないのだと思い、||で文字列を 結合してみたのですが、それでも同様の エラーが表示されました。 ex) update TEST set col1 = 'TEST' where col1 = (引数で与えられた値); 正確に申し上げますと、上記のSQL文を hensuu := (上記のSQL文) execute immediately hensuu; として実行しています。 あいまいな表現でわかりにくいかとは 思いますが、ヒントを頂けたらと思い、 質問させていただきました。 よろしくお願いいたします。

  • VBでのAPI

    いつもお世話になっています。 今回初めて、APIを使うVBのプログラミングをしているんですが、サーバからのファイル名取得でつまずいています。 long型変数 = FtpFindFirstFile(セッション番号, ディレクトリパス, str型変数, 0, 0) って感じで、何かしらファイルが存在するかどうかは戻り値で判定できるのですが、ファイル名自体が取得できません。(複数ファイルが存在するときは、どれか一つのファイル名が取得できれば問題ないです) いろんなサイトを調べたのですが、「引数の文字列変数に"情報"が取得される」ようなふうに書かれており、はっきりしません。ちなみに私の作成中のPGでは、引数の文字列変数は何も格納なれない状態です。 どなたか詳しい方、教えてくれませんか?

  • Powershellでzip圧縮が出来ない

    Powershellでzip圧縮しようとしているのですが、 ・Powershell ISEで実行すると正常に圧縮 ・コマンドプロンプトで実行すると、「圧縮(zip形式)フォルダーエラー」が発生し、圧縮できない という現象が発生しています。コマンドプロンプトで実行できるようにしたいのですが、原因がわからないので、御教示をお願いします。 ・環境 Windows XP SP3 Powershell 2.0 ・Powershellソース # 引数チェック # 引数の数が2以外の時は異常終了 if ($args.Length -ne 2 ) { write-host "引数エラー" exit 2; } # 圧縮zipファイル名 $ZipFilePath = $Args[0] # 圧縮対象ファイル名 $TargetItems = $Args[1] # 圧縮先パス存在チェック if((Test-Path (Split-Path $ZipFilePath -Parent)) -ne $True){ write-host "圧縮先パスエラー" exit 3; } # 圧縮対象ファイル存在チェック if((Test-Path ($TargetItems)) -ne $True){ write-host "圧縮対象ファイルエラー" exit 4; } # Zipファイルが存在する場合は削除 if(Test-Path -Path $ZipFilePath) { Remove-Item -Path $ZipFilePath } # Zipファイル作成 Set-Content $ZipFilePath ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) (dir $ZipFilePath).IsReadOnly = $false # Zipファイルにファイルを投入 $shell = New-Object -com Shell.Application $zipfile = $shell.NameSpace($ZipFilePath) $archivedItems = New-Object Collections.ArrayList # 圧縮対象ファイルの数だけループ foreach($item in ($TargetItems | %{Get-Item -Path $_})) { # ファイルをZipファイルに投入。圧縮処理は非同期なので、その終了を待つ。 $archivedItems.Add($item) | Out-Null $zipfile.CopyHere($item.FullName) while($true) { if($archivedItems.Count -eq $zipfile.Items().Count) { break } Start-Sleep -Seconds 1 } } write-host "処理終了" exit 0

  • mainメソッドの引数は何を表す?

     基本的なことで恐縮ですが、mainメソッドの引数は何を表すのでしょうか? コンソールアプリケーションでは(String args[])が、GUIアプリケーションでは(Graphics g)のようなものが入っていますが、これは何なのでしょう?  String args[]のほうは、コマンドライン引数を格納するための変数だと解説書に書いてあったのですが、mainがどうしてコマンドライン引数や、あるいはGraphics g に対して、処理を行う(?)のかがわかりません。  よろしくお願いします。

    • ベストアンサー
    • Java
インクを検知しない
このQ&Aのポイント
  • インクを交換しても検知せず、家電量販店に相談し試しに新しいインクをセットしても改善せず、本体の不具合だろうと言われる
  • お使いの環境はWindows10で、有線LANで接続されています。ひかり回線を使用しています。
  • ブラザー製品に関する質問です。
回答を見る