40

ねえ、私はあるフォルダから別のフォルダに複数のファイルを移動しようとしています。FileUtils行で、宛先フォルダー内の4文字のフォルダーすべてを検索し、ファイルと同じベース名のフォルダーにファイルを貼り付けようとしています。

#!/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
4

3 に答える 3

69

このようなものが機能するはずです。

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

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

于 2012-03-01T16:51:04.463 に答える
4

3つのファイルごとに1つを複数のディレクトリから別のディレクトリにコピーする必要がありました。疑問に思う人のために、これは私がそれをした方法です:

# frozen_string_literal: true

require 'fileutils'

# Print origin folder question

puts 'Please select origin folder'

# Select origin folder

origin_folder = gets.chomp

# Select every file inside origin folder with .png extension

origin_folder = Dir["#{origin_folder}/*png"]

# Print destination folder question

puts 'Please select destination folder'

# Select destination folder

destination_folder = gets.chomp

# Select 1 every 3 files in origin folder
(0..origin_folder.length).step(3).each do |index|
  # Copy files
  FileUtils.cp(origin_folder[index], destination_folder)
end
于 2020-05-18T14:36:42.283 に答える
3

*は「任意の数の文字」を意味するワイルドカードであるため、「****」は「任意の数の任意の数の任意の数の文字」を意味します。これはおそらくあなたが意味するものではありません。

?は「この位置にある任意の文字」の適切な記号であるため、「????」は「4文字の文字列のみ」を意味します。

于 2012-03-01T16:25:18.180 に答える