2017-06-28 12 views
-1

コマンドプロンプトで次の行を直接実行すると、予想される出力が表示されます。私は、.ps1ファイルから.cmdファイルに同じコマンドを実行した場合powershellから.cmdを呼び出すときにPATH変数が空です

echo %PATH% 
> C:\Program... 

はしかし、その後、PATHは空です。

# program.ps1 
python --version 
Write-Output $env:PATH 
& .\command.cmd 

# command.cmd 
python --version 
echo %PATH% 

.\program.ps1 
> Python 3.5.2 
> C:\Program... 
> 'python' is not recognized as an internal or external command 
> ECHO is on. 

はなぜPATH変数を払拭PowerShellスクリプトからコマンドを実行していますか?

EDIT

上記の例は、問題の根本を取得しようとする簡素化されました。問題は、バッチファイルから実行すると、PATH上のものが見つかりません。たとえば、私はpythonを使用することができません。私は、私が見ているものをより詳細に例を更新しました。

+1

Windows 10でPowerShell 5.1で再現できません。パス全体がエコー表示されます。 '.ps1'ファイルから' echo $ env:PATH'を実行して、そこにパスが既に空であるかどうか確認してください。 ( '.cmd'からの出力に' echo 'が含まれていることにも注意してください。'%PATH% 'が本当に空であれば、コマンドファイルは' ECHO is on'を生成しなければなりません。ファイルへのパスを指定する '。\ command.cmd'は必要ありませんか? –

+0

使用しているOSとPowerShellのバージョンは何ですか? PS5.1をW10で使ってもうまく動作します。 –

+0

その2番目。私もそれを再現することはできません。私は、command.cmdがまったく実行されないという問題があると推測します。 – Igor

答えて

-1

を行う変数に入れたい場合は、現在の経路

PS C:\Windows\system32> Get-Location 

Path 
---- 
C:\Windows\system32 

を返します。 Powershellには、正しく動作する変数$env:PATHが明示的に定義されていましたが、command.exeのコンテキストには何も定義されていない%PATH%という変数がありました。私はまだこれがどう起こったのか理解していませんが、新しいPowerShellセッションを作成することで問題が修正されました。

-2

スクリプトの目的は何ですか?

スクリプトがPowerShell用の現在のパスウェイを取得しようとしている場合は、コマンド "Get-Location"を試してください。あなたは何とか私のPowerShellセッションを台無しに得たように見え、次の

PS C:\Windows\system32> $Path = (Get-Location).path 
PS C:\Windows\system32> $Path 
C:\Windows\system32 
+1

Get-Locationは、.ps1スクリプトが存在しない現在の作業ディレクトリを示します。 $($ MyInvocation.MyCommand.Source) – lit

+0

ああ、私は質問が何を求めているのか誤解していました。はい、$ MyInvocation変数がここで最も論理的なソースになります。 – cet51

関連する問題