2017-09-01 18 views
0

のは、私がC:\sourceからCMDでこれを入力するとしましょう:test.ps1CMDまたはバッチファイルから呼び出すときに、PowerShellスクリプトで呼び出し元のディレクトリを取得することはできますか?

powershell.exe Set-ExecutionPolicy RemoteSigned -File C:\test\test.ps1 

は、私は成功せず、ディレクトリとしてC:\sourceを取得しよう。

$script_folder = $PSScriptRoot 
$myDir = Split-Path -Parent $MyInvocation.MyCommand.Path 
$myDir 
$PSScriptRoot 

両方$myDir$PSScriptRoot戻るC:\test\代わりにC:\source

答えて

2

現在の作業ディレクトリの自動変数である$PWDを使用できます。 PowerShellを開くと、引き続き同じ作業ディレクトリを使用する必要があります。 about_automatic_variables

$ PWD

から

は、カレントディレクトリのフルパスを表しパスオブジェクトが含まれています。

また、MS-DOSはPowerShellを実行できないオペレーティングシステムです。これは、cmd.exe /コマンドプロンプトとは異なります。

1

使用している自動変数は、スクリプトの呼び出しに関する情報です。スクリプトを起動するコマンドが開始された場所は、環境の一部です。

$PWDには、現在の作業ディレクトリに関する情報(pospwdコマンド)が含まれています。具体的には$PWD.Pathです。

about_automatic_variables page(または Get-Help about_automatic_variables)パー

$PSScriptRoot$PSCommandPath$MyInvocationのプロパティです

は、現在のパスを取得するためにSplit-Path -Path $($Global:$MyInvocation.MyCommand.Path)の使用例についてはhereを参照してください

テストスクリプトオススメ:。。

# TestInvocationAndPWDPaths.ps1 
function Test-MyInvocation { 
    $MyInvocation 
} 
function Test-PWD { 
    $PWD 
} 
'$MyInvocation from script:' 
$MyInvocation 
'$MyInvocation from function:' 
Test-MyInvocation 

'$PWD from script:' 
$PWD 
'$PWD from function' 
Test-PWD 

興味深い結果があります。これをpowershellコンソール、ISE、およびcommanから実行してくださいdプロンプトが$ MyInvocationの違いを表示します。

関連する問題