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

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

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

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


person Kahn    schedule 05.02.2010    source источник


Ответы (3)


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

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

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

person Binary Worrier    schedule 05.02.2010
comment
Powershell - отличный способ, если он у вас установлен - person RobS; 05.02.2010
comment
Начиная с Windows 98 даже. - person Joey; 05.02.2010
comment
Пытался получить его для Vista месяц или два назад, но возникли некоторые сложности. Могу попробовать еще раз с Win 7. Кстати, спасибо за ответ, это определенно вариант, хотя мне все равно нужно рано или поздно узнать о базовых сценариях командных файлов. - person Kahn; 05.02.2010

Предположим, вы можете собрать набор старых добрых утилит unix, обратите внимание на утилиту find. У него есть параметры, которые вы просите, и многое другое.

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

Вот сценарий, который копирует файлы старше 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 (список файлов) довольно гибкая. Его справочная страница находится по адресу http://www.biterscripting.com/helppages/lf.html.

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

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.)

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

person P M    schedule 15.02.2010