Автоматически создавать подпапки по дате и перемещать файлы в подпапку в конце дня

808
Serenity_Life

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

Моя цель состоит в том, чтобы настроить структуру папок, которая организует по дате и перемещает все файлы, которые были созданы / изменены (примечание: дата создания не совпадает с датой изменения, поэтому, если есть разница в сценарии, я ' Мне нравятся оба, пожалуйста.) в конце дня.

Расположение папки: M: \ Security Software \ iSpy \ audio \ VHCEX

Это пример имени файла: 1_2016-04-19_14-06-02.mp3

или 1_ГГГГ-ММ-ДД_ЧЧ-ММ-СС.mp3

В своем исследовании я натолкнулся на следующие сценарии [источник]

@echo off for /d %%i in (*) do ( cd %%i call :doMove cd .. ) echo Really Done goto eof: pause     :doMove echo Moving files... Please wait... for /F "tokens=1-3,4* delims=-_" %%a in ('dir /b *.avi') do ( title Processing %%b-%%c-%%d_%%e if not exist ".\%%b\%%c\%%d" ( mkdir ".\%%b\%%c\%%d" echo New Date: \%%b\%%c\%%d ) if exist "%%a_%%b-%%c-%%d_%%e" move "%%a_%%b-%%c-%%d_%%e" ".\%%b\%%c\%%d\%%e" if exist "%%a_%%b_%%c-%%d-%%e" move "%%a_%%b_%%c-%%d-%%e" ".\%%b\%%c\%%d\%%e" ) for /F "tokens=1-3,4* delims=-_" %%a in ('dir /b *.mp4') do ( title Processing %%b-%%c-%%d_%%e if not exist ".\%%b\%%c\%%d" mkdir ".\%%b\%%c\%%d" if exist "%%a_%%b-%%c-%%d_%%e" move "%%a_%%b-%%c-%%d_%%e" ".\%%b\%%c\%%d\%%e" if exist "%%a_%%b_%%c-%%d-%%e" move "%%a_%%b_%%c-%%d-%%e" ".\%%b\%%c\%%d\%%e" )  echo Moving Thumbs for /F "tokens=1-3,4* delims=-_" %%a in ('dir /b thumbs\*.jpg') do ( title Processing %%b-%%c-%%d_%%e if exist "thumbs\%%a_%%b-%%c-%%d_%%e" move "thumbs\%%a_%%b-%%c-%%d_%%e" ".\%%b\%%c\%%d\%%e" if exist "thumbs\%%a_%%b_%%c-%%d-%%e" move "thumbs\%%a_%%b_%%c-%%d-%%e" ".\%%b\%%c\%%d\%%e" )    title Done. :EOF 

Я также нашел Perl скрипт [источник]

#!/usr/bin/perl -w use strict; use File::stat; use File::Copy; use POSIX; use Mail::Sendmail; use Date::Calc qw(:all);  my $oldest_week = 4; my $delete_week = 1; my $move_count = 0; my $delete_count = 0;  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;  $year += 1900; $mon += 1;  my ($current_week,$current_year) = Week_of_Year($year, $mon, $mday);  my @folders = ("D:/iSpy/video/Front Door", "D:/iSpy/video/Front Path", "D:/iSpy/video/Garden", "D:/iSpy/video/Lounge", "D:/iSpy/video/Patio", "D:/iSpy/video/Shed");  foreach (@folders)  { my $viddir=$_;  print "$viddir\n\n";  opendir("curdir",$viddir)||die("Cannot open Directory!");  my @names=readdir("curdir");  foreach (@names)  {  my $name=$_; my $source = $viddir."/".$name; my $upname=uc($name); my $pos_avi=index($upname,".AVI"); my $pos_mp4=index($upname,".MP4");  if ($pos_avi > 0 or $pos_mp4 > 0)   {   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime (stat($source)->mtime);  $year += 1900; $mon += 1;  my ($week,$year) = Week_of_Year($year, $mon, $mday);  print "file $source was updated on $year $mon $mday - that was week $week - ";  my $target="$viddir/$week";  print "Move to folder $viddir/$week\n";  move($source,$target);  $move_count ++;  } } }  if ($oldest_week >= $current_week) { $delete_week = 52 + $current_week - $oldest_week; } else { $delete_week = $current_week - $oldest_week; }  @folders = ("D:/iSpy/video/Front Door/$delete_week", "D:/iSpy/video/Front Path/$delete_week", "D:/iSpy/video/Garden/$delete_week", "D:/iSpy/video/Lounge/$delete_week", "D:/iSpy/video/Patio/$delete_week", "D:/iSpy/video/Shed/$delete_week");  foreach (@folders)  { my $delete_dir=$_;  opendir("curdir",$delete_dir)||die("Cannot open Directory!");  my @names=readdir("curdir");  foreach (@names) {  my $name=$_; my $target = "$delete_dir/$name"; my $upname=uc($name); my $pos_avi=index($upname,".AVI"); my $pos_mp4=index($upname,".MP4");  if ($pos_avi > 0 or $pos_mp4 > 0)   {   print "file to delete is $target\n"; unlink $target; $delete_count ++;  } } }  my $mail_body = "$move_count moved";  if ($delete_count > 0) { $mail_body = $mail_body . ", $delete_count deleted from folder $delete_week\n";  } print "$mail_body\n";  my %mail = ( To => 'name@somewhere.com', From => 'iSpy@anywhere.com',  Subject => 'Daily iSpy Recordings Move / Delete', Message => $mail_body, 'content-type' => 'text/html; charset="iso-8859-1"', 'X-Mailer' => "Mail::Sendmail version $Mail::Sendmail::VERSION", );  $mail = 'smtp.anywhere.com';  if (sendmail %mail) { print "Mail sent OK.\n\n" } else { print "Error sending mail: $Mail::Sendmail::error \n" } 

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

0
Что не так с существующими скриптами? DavidPostill 8 лет назад 0
Окно cmd просто открывается и закрывается мгновенно. Я отредактировал скрипт, чтобы учесть, что расширения файлов должны быть .mp3 (забыл добавить это расширение в OP, но исправил его). Serenity_Life 8 лет назад 0

0 ответов на вопрос

Похожие вопросы