我想知道以下是否可能:
我创建ruby可执行文件的目的是能够为我的ruby脚本添加一些可移植性。该脚本的作用是收集放置在某个目录中的某些.txt文件,然后处理它们并将.txt结果输出到另一个文件目录中。
没有ocra这适用于我的脚本,因为我只是让我的脚本搜索位于其当前工作目录中的某个文件夹名称,并处理放置在其中的所有.txt并将其结果输出到另一个特定文件夹中。
我的问题是,我可以将ocra创建的最终.exe文件做同样的事情吗?
当前的问题是当我运行以下命令时:
ocra myscript.rb use_this_folder/
然后移动生成的" myscript.exe"其他地方的另一个副本" use_this_folder"位于,它无法识别该文件夹。
在我的红宝石脚本的顶部,我放置了:
$:.unshift File.dirname($0)
Dir.chdir File.dirname($0)
希望这一切都有道理。非常感谢任何帮助。
答案 0 :(得分:1)
如果我理解正确,您的程序很难找到文本文件所在的目录。我猜您的输入和输出文件夹位于要运行的exe文件的相对文件夹中。 Dir.chdir File.dirname($0)
为您提供临时目录中临时版本的exe文件。您的程序需要知道原始exe所在的位置。您的exe所在的位置存储在此变量中:ENV["OCRA_EXECUTABLE"]
。使用此命令将工作目录更改为exe所在的目录:
Dir.chdir File.dirname(ENV["OCRA_EXECUTABLE"]) if ENV["OCRA_EXECUTABLE"]
例如,这个脚本的exe文件名是" MyProgram"在另一个驱动器的根目录中:
Dir.chdir File.dirname($0)
p Dir.pwd
Dir.chdir File.dirname(ENV["OCRA_EXECUTABLE"]) if ENV["OCRA_EXECUTABLE"]
p Dir.pwd
在exe文件运行时输出:
"C:/Users/User/AppData/Local/Temp/ocr7293.tmp/src"
"D:/MyProgram"
if ENV["OCRA_EXECUTABLE"]
是一些代码,询问是否更改目录(如果它是ocra exe文件)。如果没有if语句,则Environment变量为nil,Dir.chdir
将抛出异常,因为它无法将目录更改为nil。
时间短,但希望这会有所帮助。祝你好运。