3

最終的に、私は'Product Version'ofを返そうとしていますRobocopy.exe(XP026 の使用を避けるため; 破損したリターン コード)。、、を使用して「製品バージョン」を取得できますShell.Applicationが、事前に (フォルダー|ディレクトリ|パス)を知る必要があります。NameSpaceParseNameNameSpace

スクリプトは別のコンピューターで実行され、Robocopy.exe はシステム PATH 環境変数にリストされている 1 つ以上のディレクトリにある可能性があるため、スクリプトに NameSpace パスを書き込むことはできません。PATH で見つかったものだけに関心があり、さらに、WScript.ShellRun メソッドの結果として実行されるインスタンスに関心があります。WScript.Shell Run絶対パスが指定されていない場合、システム検索パスで見つかった最初のインスタンスが実行されます。それは私が見つけたいと思っているものです。

私のバックアップ計画は、where.exe プログラムを使用して へのフル パスを見つけ、Robocopy.exevbs スクリプトを使用して戻し、上記のコードのようWScript.Shell Exec oExec.StdOutに使用するパスを抽出することです。NameSpace

winapi searchpath 関数/メソッドの vbs または com コントロールの実装を探していましたが、うまくいきませんでした。FileSystemObjectまたはでまだ実装されていないことに驚いていShell.Applicationます。助け、紹介、またはアイデアをいただければ幸いです。

4

1 に答える 1

1

特定のファイルの PATH 変数を検索するには、変数の値を取得し、「;」で分割する必要があります。文字を配列に入力し、ディレクトリ パスの配列をループして、検索するファイルが含まれているかどうかを各ディレクトリにチェックします。ただし、CMD ワンライナーを使用してそれを実現することもできます。

sFileName = "robocopy.exe"

Set oShell = WScript.CreateObject("WScript.Shell")

' this will find the file that will be actually run from command line when typed without qualified path
Set oExec = oShell.Exec("cmd /c for %G in (""" & sFileName & """) do @echo.%~$PATH:G")

' this will find all occurances of the file in directories listed in PATH
'Set oExec = oShell.Exec("cmd /c for %G in (""%path:;="" ""%"") do @if exist ""%~dpfxG\" & sFileName & """ echo %~dpfxG\" & sFileName)

Do
  line = oExec.StdOut.ReadLine()
  WScript.Echo line
  ' here you can examine the file

Loop While Not oExec.Stdout.atEndOfStream
于 2012-01-12T21:55:58.150 に答える