2012-03-01 26 views
15

Hej Próbuję przenieść wiele plików z jednego folderu do drugiego. W linii FileUtils próbuję przeszukać wszystkie 4-znakowe foldery w folderze docelowym, a następnie wkleić plik do folderu o tej samej nazwie bazowej co plik.Kopiowanie pliku z jednego katalogu do drugiego za pomocą 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, za nieprawidłową formę uważa się modyfikowanie kodu źródłowego. Użyj komentarza, aby zidentyfikować problemy, takie jak zmieniona linia '#!'. –

+4

@tinMan, nie wydaje mi się, że jest to zły pomysł, aby pomóc nowemu użytkownikowi z odpowiednim wcięciem kodu. Jeśli chodzi o shebang, myślałem, że to tylko literówka. –

Odpowiedz

31

Coś takiego powinno działać.

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 

Musisz określić folder docelowy, nie sądzę, że możesz używać symboli wieloznacznych.

+0

Nie powinieneś używać nazwa zmiennej "dest_folder", skopiowałem scenariusz nie patrząc na niego i to nie działało, ponieważ myślałem, że powinien to być folder .. Może to moja wina chociaż ..;) –

4

* jest wieloznaczny oznacza „dowolny ciąg znaków”, więc „****” oznacza „dowolny numer z dowolnej ilości dowolnej ilości dowolną liczbę znaków”, co nie jest chyba to, co masz na myśli.

? jest właściwym symbolem dla "dowolnego znaku w tej pozycji", więc "????" oznacza "ciąg tylko czterech znaków".

+0

W dopasowaniu do powłoki, właściwie "****" oznacza dowolną liczbę dowolnych znaków, po których następuje dowolna liczba dowolnych znaków, po których następuje dowolna liczba dowolnych znaków, po których następuje dowolna liczba dowolnych znaków. – akostadinov

Powiązane problemy