2016-10-19 6 views
0

私は起動時にMSIソフトウェアをインストールするように設定しましたが、何らかの理由で何らかの理由でパッケージがインストールされていないことに気付きました。私は理論上のすべてがうまくいくはずだから、MSIのインストールに関するMicrosoftの設定に従った。リモートコンピュータのファイルをバッチファイルでチェックする

私がやりたいことは、特定のファイルがマシン上にあるかどうかを確認することです。私はすべてのマシンのIPアドレスを持つtxtファイルを作成しました。テキストファイル内のIPを実行するために、そして各ループに対して、ログファイルに出力するために存在するかどうかを試しました。

しかし私が実行している問題は、ファイルが存在しないかのようにすべてが復帰し、ログファイルにelseコマンドをエコーし​​ていることです。私は実際には、これらのIP(コンピュータ)の大部分が指定したディレクトリにファイルを持っていることを知っています。

編集:IPが存在しない場合(I.E.コンピュータの電源がオフになっている)、この機能が停止します。とにかくそれをチェックするには?

ECHO ON 
for /F %%a in (ips.txt) do (
    set host=%%a 
    if exist \\%host%\c$\ProgramData\dvsAnalytics\Encore\Config\Encore.ScreenRecording.ClientService.exe.config (
    rem file exists 
    ECHO %%a>>"C:\some location\encore-install-success.log" 
    ) else (
    rem file does not exist 
    ECHO %%a>>"C:\some location\encore-install-fail.log" 
    ) 

) 
pause 
+0

あなたは、このバッチファイルを実行しているユーザーは、C $のそれぞれにアクセスすることができ、特定のですがホスト? –

+0

@ EricJ。はい、私はドメイン管理者としてDCからこのバットファイルを実行しています。 –

+0

@aschipflそれは動作しているようですが、そのIPが存在しない場合(I.E.コンピュータの電源が切れている)、スタックされてしまいます。とにかくそれをチェックするには? –

答えて

0

%%aの値を保持するために暫定変数hostを使用する必要はありません、単に直接%%aを使用します。

for /F %%a in (ips.txt) do (
    if exist "\\%%a\c$\ProgramData\dvsAnalytics\Encore\Config\Encore.ScreenRecording.ClientService.exe.config" (
     rem ...rest of your code... 
    ) 
) 

あなたが暫定変数を主張した場合、必要に同じコードブロックでと設定されているため、delayed expansionを使用してください。それ以外の場合は、ブロック全体が解析されたときに存在する値を読み込みます。変更されたコードは次のようになります。

setlocal EnableDelayedexpansion 
for /F %%a in (ips.txt) do (
    set "host=%%a" 
    if exist "\\!host!\c$\ProgramData\dvsAnalytics\Encore\Config\Encore.ScreenRecording.ClientService.exe.config" (
     rem ...rest of your code... 
    ) 
) 
endlocal 

また、あなたの質問のコードでset host=%%a後の末尾のスペースがあります。あなたの実際のsciptにも存在する場合、それは可変値の一部となり、おそらく妨害されるでしょう。これを避けるには、構文set "host=%%a"を使用する必要があります。


ホストが事前に利用可能かどうかを確認するには、pingコマンドを使用できます。

のIPv4アドレスのためにこれは確実に動作します:

ECHO ON 
for /F %%a in (ips.txt) do (
    ping -n 1 -4 %%a 2> nul | find "TTL=" > nul && (
     if exist "\\%%a\c$\ProgramData\dvsAnalytics\Encore\Config\Encore.ScreenRecording.ClientService.exe.config" (
      rem file exists 
      ECHO %%a>>"C:\some location\encore-install-success.log" 
     ) else (
      rem file does not exist 
      ECHO %%a>>"C:\some location\encore-install-fail.log" 
     ) 
    ) 
) 
pause 

とIPv6アドレスのために、これは次のとおりです。

ECHO ON 
for /F %%a in (ips.txt) do (
    ping -n 1 -6 %%a > nul 2>&1 && (
     rem ...rest of your code... 
    ) 
) 
pause 
+0

これは完全に機能します。ありがとうございました! –

関連する問題