2012-03-01 16 views
15

他のフォルダに複数のファイルを移動しようとしています。 FileUtils行では、すべての4文字のフォルダーを検索先のフォルダーで検索し、そのファイルと同じ基本名を持つフォルダーにファイルを貼り付けようとしています。Rubyを使用してあるディレクトリから別のディレクトリにファイルをコピーする

#!/usr/bin/env ruby 

require 'fileutils' 

my_dir = Dir["C:/Documents and Settings/user/Desktop/originalfiles/*.doc"] 
my_dir.each do |filename| 
    FileUtils.cp(filename, "C:/Documents and Settings/user/Desktop/destinationfolder/****/" + File.basename(filename, ".doc")) 
end 
+1

@ KL-7、それは人々のソースコードを変更する悪い形と考えられています。あなたが変更した '#!'行など、問題を特定するためにコメントを使用してください。 –

+4

@theTinMan、私は、新しいユーザーに適切なコードインデントを付けるのは悪い考えではないと思います。シバンについては、それは単にタイプミスだと思った。 –

答えて

31

何かこれはうまくいくはずです。

my_dir = Dir["C:/Documents and Settings/user/Desktop/originalfiles/*.doc"] 
my_dir.each do |filename| 
    name = File.basename('filename', '.doc')[0,4] 
    dest_folder = "C:/Documents and Settings/user/Desktop/destinationfolder/#{name}/" 
    FileUtils.cp(filename, dest_folder) 
end 

実際に宛先フォルダを指定する必要があります。ワイルドカードは使用できないと思います。

+0

変数名 "dest_folder"、私はそれを見ていないスクリプトをコピーし、私はそれがフォルダでなければならないと思ったので動作しませんでした..しかし、私のせいかもしれません..;) –

4

*「任意の数の文字」を意味するワイルドカードであるため、「****は、」あなたは何を意味するか、おそらくないが、「任意の数の文字の任意の数の任意の数の任意の数の」を意味します。

?は、「この位置の任意の文字」の正しい記号です。したがって、「????」は「4文字のみの文字列」を意味します。

+0

シェルパターンマッチングでは、実際には '****'は任意の文字数に任意の数の文字が続き、その後に任意のnymber、任意のnymberが続くことを意味します。 – akostadinov

関連する問題