J'ai un VBScript qui vérifie l'existence d'un fichier dans un répertoire sur une machine distante. Je cherche à extraire la version " J'utilise actuellement Merci. P> scripting.filesystemObject code> pour vérifier l'existence du fichier. P>
5 Réponses :
Je ne pense pas que vous puissiez le faire dans VBScript. Je pourrais me tromper sur cela.
Voici comme un lien vers un script PowerShell qui fait ce que vous demandez. P>
Voici ce que la sortie de mon Windows Dir ressemble. p>
Au lieu de ce script mystérieux, vous ne pouvez qu'utiliser: (get-item "c: \ chemin \ file.ext"). VersionInfo code>
Vous pouvez utiliser le shell.namespace a > Pour obtenir le Propriétés étendues sur un fichier, dont l'une est la version du produit. Le getDétails de fonction doit fonctionner. Vous pouvez tester avec le code suivant pour avoir une idée:
Dim fillAttributes(300)
Set shell = CreateObject("Shell.Application")
Set folder = shell.Namespace("C:\Windows")
Set file = folder.ParseName("notepad.exe")
For i = 0 to 299
Wscript.Echo i & vbtab & fillAttributes(i) _
& ": " & folder.GetDetailsOf(file, i)
Next
Vous pouvez également trouver ce qui suit post utile. p> p>
La première ligne de votre code "Dim Fillattributes (300)" n'a rien ajouté dans votre script. Vous devez remplacer "Fillattributes (i)" avec "folder.getDétails de (dossier.items, i)"
J'utilise une fonction légèrement modifiée de l'exemple précédent. La fonction prend le chemin et le nom du fichier et renvoie la "Version du produit"
Function GetProductVersion (sFilePath, sProgram)
Dim FSO,objShell, objFolder, objFolderItem, i
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(sFilePath & "\" & sProgram) Then
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(sFilePath)
Set objFolderItem = objFolder.ParseName(sProgram)
Dim arrHeaders(300)
For i = 0 To 300
arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
'WScript.Echo i &"- " & arrHeaders(i) & ": " & objFolder.GetDetailsOf(objFolderItem, i)
If lcase(arrHeaders(i))= "product version" Then
GetProductVersion= objFolder.GetDetailsOf(objFolderItem, i)
Exit For
End If
Next
End If
End Function
Vous n'avez pas créé l'objet de la FSO pour l'utiliser dans votre fonction que vous devez ajouter "SET FSO = CreateObject (" scripting.filesystemObject ")" après la ligne 2 de votre fonction
Pourquoi 300? Serait-il préférable d'utiliser (2 ^ 15) - 1, qui est la valeur entière maximale?
Wscript.Echo CreateObject("Scripting.FileSystemObject").GetFileVersion("C:\Windows\notepad.exe")
L'OP a dit Version du produit i>, pas version de fichier i>. Ce n'est pas la même chose.
Ce n'est pas techniquement correct mais il sert à mes besoins et est beaucoup plus concis que toutes les autres réponses.
' must explicitly declare all variables
Option Explicit
' declare global variables
Dim aFileFullPath, aDetail
' set global variables
aFileFullPath = "C:\Windows\Notepad.exe"
aDetail = "Product Version"
' display a message with file location and file detail
WScript.Echo ("File location: " & vbTab & aFileFullPath & vbNewLine & _
aDetail & ": " & vbTab & fGetFileDetail(aFileFullPath, aDetail))
' make global variable happy. set them free
Set aFileFullPath = Nothing
Set aDetail = Nothing
' get file detail function. created by Stefan Arhip on 20111026 1000
Function fGetFileDetail(aFileFullPath, aDetail)
' declare local variables
Dim pvShell, pvFileSystemObject, pvFolderName, pvFileName, pvFolder, pvFile, i
' set object to work with files
Set pvFileSystemObject = CreateObject("Scripting.FileSystemObject")
' check if aFileFullPath provided exists
If pvFileSystemObject.FileExists(aFileFullPath) Then
' extract only folder & file from aFileFullPath
pvFolderName = pvFileSystemObject.GetFile(aFileFullPath).ParentFolder
pvFileName = pvFileSystemObject.GetFile(aFileFullPath).Name
' set object to work with file details
Set pvShell = CreateObject("Shell.Application")
Set pvFolder = pvShell.Namespace(pvFolderName)
Set pvFile = pvFolder.ParseName(pvFileName)
' in case detail is not detected...
fGetFileDetail = "Detail not detected"
' parse 400 details for given file
For i = 0 To 399
' if desired detail name is found, set function result to detail value
If uCase(pvFolder.GetDetailsOf(pvFolder.Items, i)) = uCase(aDetail) Then
fGetFileDetail = pvFolder.GetDetailsOf(pvFile, i)
End If
Next
' if aFileFullPath provided do not exists
Else
fGetFileDetail = "File not found"
End If
' make local variable happy. set them free
Set pvShell = Nothing
Set pvFileSystemObject = Nothing
Set pvFolderName = Nothing
Set pvFileName = Nothing
Set pvFolder = Nothing
Set pvFile = Nothing
Set i = Nothing
End Function
Voici une question très similaire sur Jscript - Détection de la version et du nom de la société d'un exe à l'aide de JScript