Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создать структуру папок 
:(
    Опции темы
KaJIaLLI
Дата 12.7.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



В винде из перла пытаюсь создать дерево папок, например такую: с:\2007\07\12
вот таким скриптом:
Код

 #!c:/perl/bin/perl.exe
$current_date = `date /T`;
($day, $month, $year) = split(/\./, $current_date);
mkdir("c:/$year/$month/$day");

Ничего не создает.

Пробовал так:
Код

 #!c:/perl/bin/perl.exe
$current_date = `date /T`;
($day, $month, $year) = split(/\./, $current_date);
system("mkdir c:\\$year\\$month\\$day");

создаёт только папку 2007, а вложенные нет.

Пробовал так:
Код

 #!c:/perl/bin/perl.exe
$current_date = `date /T`;
($day, $month, $year) = split(/\./, $current_date);
system("mkdir c:\\$year");
system("mkdir c:\\$year\\$month");
system("mkdir c:\\$year\\$month\\$day");

создаёт только папку 2007, а вложенные нет, причем по второму и третьему вызову system говорит, что папка 2007 уже существует.

Я чето не догоняю как сделать, чтобы все нормально создавалось. Помогите пожалуйста.

Это сообщение отредактировал(а) KaJIaLLI - 12.7.2007, 09:22
PM MAIL   Вверх
nitr
Дата 12.7.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



KaJIaLLI, изучите принцип работы команды mkdir, это ещё с DOS известно, цепочка команд...
Код

mkdir dir1
cd dir1
mkdir dir2
cd dir2
mkdir dir3


вот такая цепочка... так что МАТЧАСТЬ ;)


--------------------
PM   Вверх
KaJIaLLI
Дата 12.7.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



Я забыл сказать, что так я тоже делал
Код

#!c:/perl/bin/perl.exe
$current_date = `date /T`;
($day, $month, $year) = split(/\./, $current_date);
system("cd c:\\");
system("mkdir $year");
system("cd $year\\");
system("mkdir $month\\");
system("cd $month");
system("mkdir $day");

Создает три папки, но они не вложены друг в друга, а находятся на одном уровне.

Это сообщение отредактировал(а) KaJIaLLI - 12.7.2007, 09:52
PM MAIL   Вверх
KSURi
Дата 12.7.2007, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Код

system("cd $...");

замени на 
Код

chdir($...)



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
amg
Дата 12.7.2007, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Странно, а у меня и без cd работает:
Код

my ($day,$month,$year) = (localtime)[3..5];
my $dir = 'c:';
foreach ($year+1900,sprintf('%02d',$month+1),sprintf('%02d',$day)) {
  $dir .= "/$_";
  next if -d $dir;
  mkdir $dir or die "Can't mkdir $dir: $!\n";
}

Правда, у меня Windows NT, может, изменилось что-то в более новых виндах.

Это сообщение отредактировал(а) amg - 12.7.2007, 10:17
PM MAIL   Вверх
Shaggie
Дата 12.7.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



Не забываем про циклы
Код

#!c:/perl/bin/perl.exe
$current_date = `date /T`;
($day, $month, $year) = split(/\./, $current_date);
chdir("c:\\");
mkdir($_), chdir("$_") foreach ($year, $month, $day);



--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
KaJIaLLI
Дата 12.7.2007, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



Код

#!c:/perl/bin/perl.exe
$current_date = `date /T`;
($day, $month, $year) = split(/\./, $current_date);
chdir("c:/");
system("mkdir $year");
chdir($year);
system("mkdir $month");
chdir($month);
system("mkdir $day");

Создаёт: c:/2007 и c:/07/12 - ахинея какая-то. Почему вот он не создает в 2007?
PM MAIL   Вверх
amg
Дата 12.7.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



KaJIaLLI, попробуй мой код. У меня он работает!

И еще, пользоваться `date /T` - не очень хорошо. Зависит от локали и даже от версии винды.
У меня, например, винда выдает 'Чт 12.07.2007' и день будет 'Чт 12'. Пользуйся перловской localtime
PM MAIL   Вверх
nitr
Дата 12.7.2007, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



работает и так...
Код

#!c:/perl/bin/perl.exe -w
use strict;

chdir 'c:\\';
foreach ( (localtime)[5]+1900, (localtime)[4]+1, (localtime)[3] ) {
    mkdir $_;
    chdir $_;
}

;)

Добавлено через 11 минут и 31 секунду
а код amg более красивше... и тоже рабочий - вся загвозка оказалась в date /T

Добавлено через 12 минут и 39 секунд
т.к. вывод в cp866, ошибочка...

Это сообщение отредактировал(а) nitr - 12.7.2007, 10:37


--------------------
PM   Вверх
KaJIaLLI
Дата 12.7.2007, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



УРА!!! nitr твой код работает. Может быть дата была виновата, но ведь я предварительно смотрел вывод date /T: 12.07.2007, без дня недели.
PM MAIL   Вверх
tba
Дата 12.7.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 20.6.2007

Репутация: нет
Всего: нет



Цитата(KaJIaLLI @ 12.7.2007,  09:21)
В винде из перла пытаюсь создать дерево папок, например такую: с:\2007\07\12
вот таким скриптом:
Код

 #!c:/perl/bin/perl.exe
$current_date = `date /T`;
($day, $month, $year) = split(/\./, $current_date);
mkdir("c:/$year/$month/$day");

Ничего не создает.
...

File::Path все за вас сделает

Код

...
use File::Path qw/mkpath/;
...
mkpath("c:/$year/$month/$day", 0, 0777);

PM MAIL   Вверх
KaJIaLLI
Дата 12.7.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



Забыл сказать. Спасибо всем!!
PM MAIL   Вверх
nitr
Дата 12.7.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



KaJIaLLI, код amg тоже должен работать...  smile

Добавлено через 1 минуту и 1 секунду
tba, молодец smile


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.