Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Условие изменения файла (http://forum.oszone.net/showthread.php?t=341997)

Sisin 30-08-2019 00:47 2885951

Условие изменения файла
 
Подскажите, пожалуйста, как с помощью 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 2885957

Sisin, давайте начнём с другого — как планируется определять искомый накопитель, в данном случае, проще говоря — как планируется определять букву искомого раздела?

YuS_2 30-08-2019 08:42 2885973

Цитата:

Цитата Iska
как планируется определять искомый накопитель »

Предполагаю, что тут всё проще... т.е. по запуску пакетника определяется наличие файла, независимо от наличия носителя.

А вот с работа датами в cmd, как известно, задача часто нетривиальная, поэтому проще организовать это через powershell:
Цитата:

Цитата Sisin
как с помощью 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 2885989

Цитата:

Цитата Iska
Sisin, давайте начнём с другого — как планируется определять искомый накопитель, в данном случае, проще говоря — как планируется определять букву искомого раздела? »

Он всегда G:

Цитата:

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

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

megaloman 30-08-2019 10:41 2885992

Sisin, xcopy /d решает Вашу задачу даже без батника, при условии, что пути заведомо известны и не надо определять букву носителя.

Sisin 30-08-2019 11:57 2886002

Цитата:

Цитата megaloman
xcopy /d решает Вашу задачу даже без батника, при условии, что пути заведомо известны и не надо определять букву носителя. »

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

megaloman 30-08-2019 12:05 2886004

Sisin, голубчик, да Вы, как я погляжу, тоже верхогляд, как и я. :). Читать хелп надо внимательно :)
Цитата:

Цитата XCopy /?
/D:m-d-y Копирование файлов, измененных не ранее указанной даты.
Если дата не указана, заменяются только конечные файлы,
более старые, чем исходные.


Iska 30-08-2019 16:16 2886036

Цитата:

Цитата Sisin
Он всегда G: »

Сегодня мы все G:. Это сегодня он G:. А завтра может быть и не G:, на то он и съёмный.

megaloman 30-08-2019 16:47 2886041

Цитата:

Цитата Iska
А завтра может быть и не 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 2886058

if exist, а дальше robocopy.


Время: 10:38.

Время: 10:38.
© OSzone.net 2001-