Bat-файл, который копирует файлы из папки с изменением имени на YYYYMMDD


2

Может кто-то указать мне верное направление?

Мне нужно запланировать файл bat, который копирует файлы из папки, имя которой меняется ежедневно, и мне нужно скопировать их из вчерашней папки. То есть если сегодня 12 февраля 2010 г. мне нужно скопировать файлы из папки 20100211, а завтра мне нужно будет скопировать из папки 20100212

Есть идеи?

Ответы:


1

В пакетном файле это почти невозможно, так как вы не можете выбрать формат. Однако, если у вас есть PowerShell на этом компьютере, вы можете использовать Get-Date:

$now = get-date -format yyyyMMddTHHmmss
$fileName = $now + "_something.txt"
Copy-Item $source -Destination $fileName

1
Это не относится к пакетным файлам: robvanderwoude.com/datetimentparse.php
Joey

@Johannes. Это не так просто. Хотя эти функции могут анализировать формат даты в США, они не работают для всех существующих форматов. Примером является хорватский формат даты (д.м.гггг.). Да, вы, вероятно, могли бы компенсировать это, но это слишком большая зависимость от системы и конкретной локали, чтобы я был удовлетворен этим. Я бы использовал это только в крайнем случае.
Josip Medved

Как уже упоминалось, выход date показывает формат, а также разделитель, так что Можно разбирать даты в разных форматах.
Joey

@Johannes. Как упомянуто там, это не работает в текущей форме с единственными обозначениями d / m / y. Я попробовал это в моей системе, и он работает, когда я изменяю его на американский формат, но он не работает по умолчанию. Его можно изменить - в этом нет никаких сомнений - но я вижу это как последнее средство, только если более продвинутая оболочка недоступна. Для меня просто иметь такое количество строк в пачке довольно страшно.
Josip Medved

0

Достаточно ли будет синхронизировать родительский каталог этих каталогов YYYYMMDD с другим каталогом? Таким образом, вам не придется беспокоиться об изменении имени. Robocopy отличный инструмент командной строки для зеркалирования одного каталога в другой. Это стало одной из стандартных команд Vista. Если вы все еще используете XP, вы можете получить его как часть Инструменты комплекта ресурсов Windows Server 2003 , Если вы не хотите, чтобы все в родительском каталоге копировалось, вы можете указать файлы и / или каталоги, которые будут игнорироваться в файле задания Robocopy.


0

Вот пакетный скрипт, который будет копировать файлы из C: / FromFolder / yyyymmdd в C: / ToFolder (yyyymmdd - вчерашняя дата).

# Script CopyYesterday.txt
var str yesterday, list, file
set $yesterday = addtime(diff("-1000000"))   # "-1000000" = subtract 1 day, 00 hrs, 00 mins, 00 secs
chex "8]" $yesterday > $yesterday
# We now want to copy files from C:/FromFolder/$yesterday to C:/ToFolder.
lf -n "*" ("C:/FromFolder/"+$yesterday) ($ftype=="f") > $list
while ($list <> "")
do
    lex "1" $list > $file
    system -s "copy /Y" ("\""+$file+"\"") "C:/ToFolder"
done

Скопируйте и сохраните скрипт в файле C: /Script/CopyYesterday.txt. Затем запланируйте выполнение этой команды ежедневно.

"C:/biterScripting/biterScripting.exe" "C:/Script/CopyYesterday.txt"

Вам нужно будет установить biterscripting ( http://www.biterscripting.com ). Это отлично подходит для гибкого управления файлами. Страницы справки для addtime, команды lf и т. Д. Находятся на их сайте, или вы также можете сделать «help addtime» и т. Д. В битрейскрипте.


Вам не нужны внешние инструменты для этой задачи.
dolmen
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.