2017-11-05 3 views
-2

ネットワークコンピュータで簡単なクエリを実行してWindows版を取得しようとしています。このコマンドを実行すると、戻り期待される結果は、コマンドラインから使用する場合:Perl Windowsコマンドが失敗する

psexec \\comp_name reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId 

が、Perlのから実行するときに使用した:

system("psexec \\\\$comp_name reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v ReleaseId") 

私は両方のコマンドがあることを考えるとREG ERROR: Invalid key name.からエラーが出ます同じですが、なぜPerlから実行しているときにエラーが発生しているのかわかりません。私の唯一の仮定は、引用符を解決する方法です。この問題は、私がsystem、exec、または``を使用しているかどうかにかかわらず存続します。助言がありますか?

+0

多分文字列補間の問題ですか? – alex

+2

常に 'use strict;警告を使用するqw(すべて); '!!!あなたのエラーを特定したはずです。 – ikegami

答えて

2

あなたはバックスラッシュのすべての倍にする必要があります:問題を修正します

system("psexec \\\\$comp_name reg query 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion' /v ReleaseId") 
+0

ありがとう、これは本当に問題でした。これは、明らかに '\" HKLM ... \ "' –

0

すべてのバックスラッシュを倍増し、しかし単一の外部引用符と内部の二重引用符を使用して二重のバックスラッシュを追加している必要性を排除します読むのが簡単です。

use strict; #Always use strict 
use warnings; #Always use warnings 

system('psexec \\$comp_name reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId'); 
関連する問題