質問: ### 前提・実現したいこと 実現したいこと windows batファイルで取得した引数をwindows ps1ファイルの変数に渡したいです。 前提 以下のファイルを用いて、powershellのスクリプト実行を行いたいです。 1.windows batファイル カレントディレクトリのファイル名(引数)を取得するバッチ 2.windows ps1ファイル 1.windows batファイルで取得したファイル名(引数)を変数として フルパスを作成する。 ※ファイル名はあらかじめ分かっておらず、 1.windows batファイルを通して初めてわかるものとします。 C:\Downloads\aa\(変数) ### 発生している問題 1.windows batファイルで引数を設定することができません 例) カレントディレクトリ(C:\Downloads\aa\)の中に3つのファイルが存在します。 b.txtのみ取得したいです。 a.txt b.txt c.txt 1.windows batファイルから2.windows ps1ファイルに変数を渡すことができません。 ### 試したこと 自分なりに調べて以下のwindows batファイルと2.windows ps1ファイルを 作成しましたが、よくわかっていない状態です。 test.ps1(2.windows ps1ファイル) Write-Host ('渡された引数1個目:' + $Args[0]) test.bat(1.windows batファイル) cd C:\Downloads\aa\ dir b/ powershell .\test.ps1 a.txt ※a.txt を引数にしたい ご教示のほどよろしくお願いいたします。
回答: 試してみましたが引っかかると思われる部分は二点ぐらいですね。 まずtest.batファイル内でcdコマンドでカレントディレクトリを移動させているため、 test.ps1ファイルがC:\Downloads\aa\ディレクトリ内にないと見つからず実行できませんが、 この点は問題ないでしょうか。 またデフォルトのPowershellの設定ではセキュリティ上、スクリプトの実行権限が設定されていないので実行できません。 powershell -NoProfile -ExecutionPolicy Unrestricted .\test.ps1 a.txt のように実行権限を指定して実行させる必要があります。 ### 追加質問への回答 コマンドプロンプトバッチだと配列が正式にサポートされていないので配列っぽく見せたやり方になります。 始めの質問で上げられてたa,b,c.txtで例にすると ``` SET ARRAY[1]=a SET ARRAY[2]=b SET ARRAY[3]=c SETLOCAL ENABLEDELAYEDEXPANSION FOR /l %%N IN (1,1,3) DO ( CALL powershell -NoProfile -ExecutionPolicy Unrestricted .\test.ps1 %%ARRAY[%%N]%%.txt ) ENDLOCAL ``` 指定ファイル数を増やしたい場合、「SET ARRAY[数字]=」の項目を追加し、 「FOR /l %%N IN (1,1,ループ数) DO (」のループ数の部分を増やしてください。