0

我遇到了一个感觉很基本的错误,但我找不到任何关于我正在努力解决的问题的文档。这是代码:

require "fileutils"

def new_name(fn, dest = '/Volumes/External/Different\ Sublevel/Renamed', append = '_01')
    ext = File.extname(fn)
  File.join( dest, File.basename(fn, ext) + append + ext )
end

Dir[ '/Volumes/External/Example/Sublevels/**/*.xml' ].
select { |fn| File.file? fn }.
each   { |fn| FileUtils.cp fn, new_name(fn) }

我要做的就是移动一些文件(非破坏性)并附加文件名。它在一些本地文件上效果很好,但我做了多个级别../../../来让它工作。指定外部驱动器有什么特别之处吗?

4

1 回答 1

1

您正在尝试使用未在撇号内解释的转义空格字符传递字符串。您必须省略转义字符

'/Volumes/External/Different Sublevel/Renamed'

或将其放在双引号中

"/Volumes/External/Different\ Sublevel/Renamed".

用撇号创建的字符串只解释两个转义序列:反斜杠'\\'和撇号本身'\''

wikibooks.org 上有关 Ruby 字符串的详细信息

于 2013-03-20T01:49:14.223 回答