2014-08-27 61 views
0

下面的代碼:File.rename不工作在Windows

files = Dir.glob("*") 
files.each do |file| 
if File.extname(file) == ".pdf"  
    format = file.split(".pdf") 
    format = format.join("").split(" ") 
    format[0] = format[0].gsub(".","/") 
    format[0] << "_" 
    format[0].prepend("_") 
    format[-1] << ".pdf" 
    format = format.join("") 
    puts "Changed #{file} to #{format}" 
    File.rename(file,format) 
end 
end 

它是從同一個目錄中的文件運行。我試圖給File.rename參數絕對路徑,通過追加Dir.pwd的結果給他們。代碼不是很乾淨,因爲它是我真正快速提取的內容,請原諒。

我得到以下錯誤:

Changed 05.01.14 Mid-Day 1.pdf to _05/01/14_Mid-Day1.pdf 
script.rb:12:in `rename': No such file or directory - (05.01.14 Mid-Day 1.pdf, _05/01/14_Mid-Day1.pdf) (Errno::ENOENT) 
     from script.rb:12:in `block in <main>' 
     from script.rb:2:in `each' 
     from script.rb:2:in `<main>' 

如果我把File.exists?(file)它回來爲真。我完全搞不清楚爲什麼這不起作用。

我在Windows上運行這個。

+0

'format.join(「」)'寫得更好'format.join'。考慮把'gsub(「。」,「/」)寫成'tr('。','/')',因爲它更快。而且,不要重複分配給'format [0]',而是將該值賦給一個單獨的值,然後,當你完成時,返回'format [0]'。它不那麼令人困惑,而且速度更快。 – 2014-08-27 21:31:36

+0

而且,當你尋求幫助時,如果你能夠清楚地提供一些輸入數據,例如你所看到的路徑,這將非常有幫助。因爲我們可以根據錯誤來彌補錯誤,這幾乎無助於我們的幫助。 – 2014-08-27 21:49:34

回答

1

目錄結構_05/01似乎不存在。您需要先在FileUtils.mkdir_p之前創建目錄,然後才能將文件移動到那裏。

+0

.....我剛剛意識到我的問題。當我決定在文件名中添加斜線時,我肯定有一個大腦放屁。感謝您爲我顯而易見哈哈。 – Michael 2014-08-27 20:34:06

+1

Ruby也在正斜線的窗口上處理路徑,這就是爲什麼你的腳本試圖將文件移動到子目錄。 – koffeinfrei 2014-08-27 20:35:23

+0

「'Ruby在正斜線的窗口上也處理路徑'」[記錄在IO類中](http://www.ruby-doc.org/core-2.1.2/IO.html)。換句話說,將所有文件路徑視爲Linux,Ruby會很開心。當然這不適用於URL,但這是一個不同的蠕蟲。 – 2014-08-27 21:45:37