`

Ruby练习贴02: 在Windows上, 取得文件的版本信息

阅读更多

今天日本的客户来了一个要求,

他想要一个报表, 包含我们程序安装目录下的所有文件, 以及这些文件的版本信息.

看了一下, 安装路径下共有上千个文件,

看来这个问题人是搞不定了, 正好写一个ruby脚本.

 

在下面这篇博客里面已经介绍了遍历文件夹的操作.

Ruby练习贴01: 遍历两个文件夹, 删除那些名字相同, 内容也相同的文件

所以剩下的问题就是如何取得一个文件的版本信息了

(如果这个文件存在版本信息的话, 一般dll, exe文件都有版本信息, 但是txt这些文件一般就都没有了.)

 

为了解决这个问题, 需要使用ruby的Win32API.

可以参考的连接有, 其中第二个连接中还包含Win32API的其他的一些例子:

Win32API@ruby-doc.org

Microsoft Windows Support@Programming Ruby - The Pragmatic Programmer's Guide

Checking version of file in Ruby on Windows@stackoverflow

 

解决这一问题的脚本如下, 调用get_version函数, 直接返回该文件所对应的版本信息.

require "Win32API"

def get_version (filename)
  s=""
  vsize = Win32API.new('version.dll', 'GetFileVersionInfoSize',['P', 'P'], 'L').call(filename, s)
  #p vsize
  if (vsize > 0)
    result = ' '*vsize
    Win32API.new('version.dll', 'GetFileVersionInfo',['P', 'L', 'L', 'P'], 'L').call(filename, 0, vsize, result)
    rstring = result.unpack('v*').map{|s| s.chr if s<256}*''
    r = /FileVersion..(.*?)\000/.match(rstring)
    #puts "FileVersion = #{r ? r[1] : '??' }"
    ver = r[1]
  else
    ver = ""
  end
end

target1 = 'C:\Program Files (x86)\Microsoft F#\v4.0\Fsc.exe'
target2 = 'C:\Windows\DirectX.log'
target3 = 'C:\Windows\notepad.exe'
puts get_version target1
puts get_version target2
puts get_version target3

 

Ruby还有这么一个gem, win32-api.

他是Win32API的一个替代品.

他们之间的区别可以参考下面的连接

http://rubydoc.info/gems/win32-api/1.4.8/frames

 

最后,贴出这个应用的完整代码,

遍历特定文件夹, 显示所有文件的相对文件名, 以及他们的版本信息.

require "fileutils"
require "pathname"
require "Win32API"

def get_version (filename)
  s=""
  vsize = Win32API.new('version.dll', 'GetFileVersionInfoSize',['P', 'P'], 'L').call(filename, s)
  #p vsize
  if (vsize > 0)
    result = ' '*vsize
    Win32API.new('version.dll', 'GetFileVersionInfo',['P', 'L', 'L', 'P'], 'L').call(filename, 0, vsize, result)
    rstring = result.unpack('v*').map{|s| s.chr if s<256}*''
    r = /FileVersion..(.*?)\000/.match(rstring)
    #puts "FileVersion = #{r ? r[1] : '??' }"
    ver = r[1]
  else
    ver = ""
  end
end


target_dir = "C:/Program Files (x86)/my-install-folder"
Dir.glob("#{target_dir}/**/*") do |item|
  next if File.directory? item
  relative_path = Pathname.new(item).relative_path_from(Pathname.new(target_dir))
  info = "#{relative_path}\t\t#{get_version item}"
  puts info
end

 

 

 

 

 

分享到:
评论

相关推荐

    ruby运行环境,ruby安装,windows版本

    本文将详细介绍如何在Windows上安装Ruby,以及如何使用提供的压缩包文件。 首先,Ruby的安装通常通过RubyInstaller进行,这是一个为Windows用户设计的方便工具。在本案例中,提供的压缩包文件名为`railsinstaller-...

    ruby windows一键安装

    为了解决这个问题,"ruby windows一键安装" 提供了一个简便的方法,帮助用户快速在Windows上搭建Ruby开发环境。 Ruby的Windows一键安装工具通常是像`rubyinstaller`这样的程序,它包含了Ruby解释器、标准库以及必要...

    Ruby语言入门教程:从安装到编写

    2. **编写代码**:在文件中输入以下代码: ```ruby puts "Hello, World!" ``` 3. **运行程序**:保存文件后,在命令行中切换到该文件所在的目录,并执行命令`ruby hello_world.rb`。你应该能在终端看到输出:...

    Windows上配置Ruby运行环境详解

    下面,我们将详细讨论如何在Windows上配置Ruby环境。 1. **下载Ruby安装包** 首先,你需要访问Ruby官方网站(https://www.ruby-lang.org/)下载适合Windows系统的Ruby安装包。在提供的文件名"ruby186-26.exe"中,...

    windows 安装 Ruby 安装包 64 位

    下面我们将详细介绍如何在Windows上安装64位的Ruby开发环境。 首先,你需要下载Ruby的安装包。在这个例子中,你已经有一个名为"rubyinstaller-devkit-3.0.3-1-x64_2.exe"的文件,这通常包含了Ruby解释器和DevKit。...

    Ruby工具 windows 环境

    在Windows上编写Ruby脚本,可以使用任何文本编辑器,如Notepad++或Visual Studio Code,并保存文件为`.rb`扩展名。然后,你可以通过在命令行中输入`ruby [filename.rb]`来运行你的脚本。 在压缩包中的"说明_Readme....

    ruby-windows-64

    1. **Ruby Installer**: Ruby在Windows上的常见安装方式是使用RubyInstaller,它提供了包含所有依赖的自解压可执行文件,适合于64位系统的版本为RubyInstaller-x64。下载对应版本的RubyInstaller后,运行安装程序,...

    ruby在unbuntu的安装版本

    本指南将详细讲解如何在Ubuntu系统上安装Ruby 2.1.5这一特定版本。 首先,确保你的Ubuntu系统是最新的。打开终端并运行以下命令来更新系统软件包: ```shell sudo apt-get update sudo apt-get upgrade ``` 接...

    ruby windows

    这个7z文件包含了64位版本的Ruby 2.4.1,包含了所有必要的库和依赖项,使得在Windows上安装Ruby变得简单。解压后,运行安装程序,按照向导指示完成安装。 2. **Ruby版本管理**: - 在Windows上,不像Unix/Linux有...

    RUBY+1.8 windows UI

    总的来说,这个“RUBY+1.8 windows UI”提供了在Windows系统上方便快捷地安装和使用Ruby 1.8的途径,适合那些想要学习或使用这个早期版本的开发者。通过这个安装程序,用户可以享受到完整的开发环境,包括必要的工具...

    编译ruby用到依赖模块(for windows)

    3. **MinGW/MSYS**: MinGW是Minimalist GNU for Windows的缩写,它提供了一个在Windows上运行的POSIX兼容环境。MSYS是Minimal SYStem的简称,是MinGW的一部分,提供了一个Bash shell和一些Unix工具,这对于Ruby的...

    Ruby Under a Microscope An Illustrated Guide to Ruby Internals

    作者并没有停留在表面的代码编写上,而是深入到了Ruby的不同版本中,揭示了随着语言版本迭代,内部实现上的变化和改进。 书中还提到了Ruby中使用的算法最初是为了Lisp语言开发的。Ruby的设计者在创建Ruby语言时,...

    ruby 2.3.1 windows64位安装包

    5. **安装DevKit**:Ruby在Windows上还需要一个名为DevKit的工具,用于编译C扩展的gem(Ruby的库)。下载适合你的Ruby版本的DevKit,解压后将其路径添加到PATH环境变量中。 6. **验证安装**:安装完成后,打开命令...

    ruby 读取cfg文件

    在Ruby编程语言中,读取配置文件(如cfg文件)是一项常见的任务,这通常涉及到从文件中获取特定的键值对以供程序使用。在本篇文章中,我们将深入探讨如何在Ruby中有效地读取和处理cfg文件,以及如何根据指定的键来...

    ruby:Ruby 中的练习练习

    Ruby 中的练习练习 目录 自述文件 投稿指南 Ruby图标 设置 您需要一个最新的 (2.6+) 版本的 Ruby,仅此而已。 Minitest 附带了该语言,因此您已准备就绪。 运动解剖 练习的文件存在于exercises/&lt;slug&gt; 。 练习的 ...

    homebrew-portable-ruby::automobile:可以从文件系统上的任何位置安装和运行的Ruby版本

    可以构建Ruby版本的公式和工具,可以在文件系统上的任何位置安装和运行这些版本。 如何安装这些公式 只需brew install homebrew/portable-ruby/&lt;formula&gt; 。 如何为这些公式构建软件包 苹果系统 在OS X 10.10 VM内...

    Ruby 安装 – Windows.docx

    ### Ruby在Windows系统上的安装与配置 #### 一、引言 随着编程语言的多样化发展,Ruby作为一种简洁、高效且易读的语言,在Web开发、自动化脚本等领域得到了广泛应用。对于Windows用户来说,如何在自己的操作系统上...

    安装rvm,把ruby版本提升至3.0.0

    在IT行业中,管理和切换Ruby版本是一项常见的任务,特别是在开发环境中,不同的项目可能依赖于不同版本的Ruby。`RVM`(Ruby Version Manager)是解决这一问题的利器,它允许开发者在多个Ruby版本之间轻松切换。本文...

    ruby 最新 安装文件 与 API

    Ruby是一种面向对象的脚本语言,它...综上所述,这个资源提供了在Windows上安装Ruby的基础,同时也可能包含了一些API的使用指导和文档,对于初学者或者需要在Windows环境下开发Ruby应用的开发者来说,是非常有价值的。

    ruby1.8.6-26

    首先,让我们来看看Ruby 1.8.6在Windows上的安装。文件名"ruby186-26 (1).exe"表明这是一个针对Ruby 1.8.6的Windows安装程序,版本号为26。安装过程通常包括以下步骤: 1. 下载:访问官方网站或第三方资源下载Ruby ...

Global site tag (gtag.js) - Google Analytics