プロが教えるわが家の防犯対策術!

こんにちは。

今、WINDOWSでバッチファイルからPHPプログラムを開いて、PHPで得た値をバッチファイル側に戻したいと考えています。

これは、WINDOWSの.lnkというショートカットファイルのリンク先をPHPプログラムでゲットして、そのリンク先をバッチファイルに戻すことによって、コマンドラインからバッチファイルを引数の『.lnkファイル』を付けて呼び出した場合は、コマンドラインのカレントディレクトリがリンク先に移動する…って出来れば便利だなぁと思って。

現状、PHPから.LNKファイルのショートカットリンク先をゲットすることが出来ましたが、バッチファイルにはそのリンク先を返せていません。

そもそも、返すことが出来るのでしょうか?出来ないならば、POWERSHELLのバッチファイル的な.ps1に戻り値を戻すことが出来るのでしょうか?

コレばっかりはググっても分かりませんでした。ご存じの方、よろしくお願いいたします。

A 回答 (1件)

バッチファイルは、外部コマンドからはエラーレベルの数値しか受け取れなかったのではないでしょうか?(うろ覚え)



PowerShellコンソールでの場合ですが、PHPスクリプトからパス情報を取得したい場合は以下の記述になると思います。
ただし、こちらにPHPの実行環境がないので未検証です。

PS> Set-Location -LiteralPath $(php .\test.php .\shortcut_file.lnk)

 $( )の中がPHPスクリプトの実行で
 Set-Location -LiteralPath …… がコマンドプロンプトで言うところのcdコマンドです。

 ※PHPスクリプトは引数にショートカットファイルのパスを与える前提の表現です。
 ※PHPのスクリプト(上のtest.php)側では、ショートカットファイルのリンク先の絶対パスを
  標準出力に出力するようにする必要があります。



以下、余談ですが
PHPスクリプトを使用しなくてもPowerShellだけで以下の様にすれば可能です。

----- test.ps1 ここから
if($ARGS.Count -eq 0){
Out-Host -InputObject "Usage: test.ps1 shortcut_file"
} else {
$shortcut = Get-ChildItem $ARGS[0]
$shell = new-object -comobject WScript.Shell
$path = $shell.CreateShortcut($shortcut.fullname).WorkingDirectory
Set-Location -LiteralPath $path
}
----- ここまで

使用方法
PS> .\test.ps1 .\foo.lnk
    • good
    • 0
この回答へのお礼

とても素晴らしいご回答、痛み入ります。
私のスキルではまだまだコマンドプロンプトのバッチファイルを記述できるレベルなので、
御教示頂きました、POWERSHELLにおいての方法をマスターできるように、
日々勉強に励みたいと存じます。

大変ありがとうございました。。

ベストアンサーに選ばせて頂きます。<m(__)m>

お礼日時:2018/07/02 23:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!