Написание пакетного файла для копирования на основе даты

Мне нужно сделать пакетный файл, который может копировать файлы из одного пути в другой на основе параметров.

Например, введите "datecopy -m 8 c:/copyfrom/*.* d:/copyto/*.*", чтобы найти все файлы в c: / copyfrom, датированные менее 8 месяцев, и скопировать их в d: / copyto-папка. В качестве альтернативы вместо -m для месяца я мог бы использовать -h для часа или -y для года.

Это не полная программа, конечно, но я должен начать. Спасибо за любые возможные советы.:)

3 ответа

Решение

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

В последнее время я смотрю на Windows Powershell, в основном на Windows Scripting по скорости.
Однако вы можете быть уверены, что Windows Script Host (jscript & VBScript) уже работает в Windows начиная с XP (возможно, начиная с W2k).

Мой совет НЕ использовать пакетные команды Windows.

Предположим, что вы можете собрать набор старых добрых инструментов Unix, взгляните на find полезность. Он имеет опции, которые вы просите, и многое другое.

find c:/copy/from -atime 240 | xargs cp "{}" c:/copyto

Вот скрипт, который будет копировать файлы старше 8 месяцев.

# Script TimedCopy.txt
var str from, to, timediff, list, file
lf -n "*" $from ($ftype=="f") AND ($fmtime > addtime(diff(("-"+$timediff)))) > $list
while ($list <> "")
do
    lex "1" $list > $file
    system copy ("\""+$file+"\"") ("\""+$to+"\"")
done

Команда lf (list files) довольно гибкая. Его страница справки находится по адресу http://www.biterscripting.com/helppages/lf.html.

Для запуска сценария скопируйте и вставьте сценарий в файл C:/Scripts/TimedCopy.txt, запустите biterscripting и выполните эту команду.

script "C:/Scripts/TimedCopy.txt" from("c:/copyfrom") to("d:/copyto") timediff("240000000")

Объяснение аргумента timediff

"240000000" означает 240 дней, 00 часов, 00 минут, 00 секунд

"120000" означает 12 часов, 00 минут, 00 секунд

"3000" означает 30 минут, 00 секунд

"30" означает 30 секунд

и т.п.

(По дате я предполагаю, что вы имеете в виду измененный. Если вы имели в виду созданный, используйте $fctime вместо $fmtime в сценарии.)

Надеюсь это поможет.

Другие вопросы по тегам