Войти

Показать полную графическую версию : Условие изменения файла


Sisin
30-08-2019, 00:47
Подскажите, пожалуйста, как с помощью bat скопировать файл при двух условиях:
1. если он есть (т.е. подключен внешний накопитель)
2. если файл изменен (дата изменения копируемого файла больше, чем дата файла, на место которого производится копирование)

@echo OFF

if exist "G:\11\12.pdf" copy "G:\11\12.pdf" "C:\" /y

pause

Iska
30-08-2019, 02:34
Sisin, давайте начнём с другого — как планируется определять искомый накопитель, в данном случае, проще говоря — как планируется определять букву искомого раздела?

YuS_2
30-08-2019, 08:42
как планируется определять искомый накопитель »
Предполагаю, что тут всё проще... т.е. по запуску пакетника определяется наличие файла, независимо от наличия носителя.

А вот с работа датами в cmd, как известно, задача часто нетривиальная, поэтому проще организовать это через powershell:
как с помощью bat скопировать файл при двух условиях »
раз уж потребовался именно батник, то:
@echo off
set "src=G:\11\12.pdf"
set "dst=C:\12.pdf"
powershell -c "&{if((gi '%src%').lastaccesstime -gt (gi '%dst%').lastaccesstime){cp '%src%' '%dst%' -force}}"

Sisin
30-08-2019, 10:15
Sisin, давайте начнём с другого — как планируется определять искомый накопитель, в данном случае, проще говоря — как планируется определять букву искомого раздела? »

Он всегда G:

раз уж потребовался именно батник, то: »

Спасибо) Но хотелось бы без powershell.
Хочу понять для себя, т.к. не нашел ответа.

megaloman
30-08-2019, 10:41
Sisin, xcopy /d решает Вашу задачу даже без батника, при условии, что пути заведомо известны и не надо определять букву носителя.

Sisin
30-08-2019, 11:57
xcopy /d решает Вашу задачу даже без батника, при условии, что пути заведомо известны и не надо определять букву носителя. »

Но в xcopy /d надо указывать дату, а как мне сравнить даты?? Мне же надо скопировать, если дата больше.

megaloman
30-08-2019, 12:05
Sisin, голубчик, да Вы, как я погляжу, тоже верхогляд, как и я. :). Читать хелп надо внимательно :)
/D:m-d-y Копирование файлов, измененных не ранее указанной даты.
Если дата не указана, заменяются только конечные файлы,
более старые, чем исходные.

Iska
30-08-2019, 16:16
Он всегда G: »
Сегодня мы все G:. Это сегодня он G:. А завтра может быть и не G:, на то он и съёмный.

megaloman
30-08-2019, 16:47
А завтра может быть и не G:, на то он и съёмный. »И, самое плохое, не понятно: это флэшка или внешний винт. Однако, если размещение исходного и обновляемого файлов не совпадают, то:@Echo Off
Set "From=11\12.pdf"
Set "To=C:"
FOR /F "usebackq tokens=1 skip=1 delims=:" %%d IN (`"wmic logicaldisk get caption | FINDSTR /R /C:"[A-Z]""`) DO (
If Exist "%%d:\%From%" >nul xcopy /Y /D "%%d:\%From%" "%To%\"
)
Exit /B

DJ Mogarych
30-08-2019, 20:53
if exist, а дальше robocopy.




© OSzone.net 2001-2012