2010-10-19 114 views
3

我正尝试在Ruby中编写一个简单的备份脚本,将文件夹复制到名称中带有时间戳的特定目录中。 我的代码(简化):使用当前时间创建文件夹作为名称

require 'Fileutils.rb' 
time = Time.now 
FileUtils.cp_r "C:/somefolder", "D:/somefolder_backup_#{time}" 

但我不断收到

`fu_mkdir': Unknown error - mkdir failed (SystemCallError) 

同样的情况,如果我只是想在它创建与当前时间的文件夹:

FileUtils.mkdir "C:/somefolder_#{time}" 

如果我忽略#{time} - 它完美的工作,它似乎不是一个特权问题。

任何意见,赞赏。

回答

7

我的猜测是你的时间字符串中有一个字符,Windows不允许在目录名中(你的代码在我的Ubuntu机器上适合我)。尝试格式化您的时间,以便它只是数字,这可能会工作:

require 'Fileutils.rb' 
time = Time.now.strftime("%Y%m%d%H%M%S") 
FileUtils.cp_r "C:/somefolder", "D:/somefolder_backup_#{time}" 
+0

呃,很明显。正如rspeicher所说,冒号就是问题所在。谢谢,你的代码完美无缺! – Lennart 2010-10-19 18:45:13

1

通过Time.now返回的字符串有冒号在里面,这是目录名非法字符。

使用Daniel的代码来格式化时间。

相关问题