Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/203: Рейтинг темы: голосов - 203, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14

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

16.06.2016, 13:49. Показов 39533. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. В создании bat файлов я полнейший ноль, второй день рою интернеты, но чем дальше в лес...
Помогите, пожалуйста, с батником для копирования.
Есть каталог "example" с кучей подкаталогов, в которых в свою очередь лежат бинарники с именами test.bin. Нужно постоянно сканировать "example" и искать там эти бинарники. В папке example лежит папка "out", куда нужно копировать с заменой самый свежий бинарник, т.е.
1. ищем бинарники, смотрим их дату/время изменения
2. находим среди них самый свежий и сравниваем дату изменения файла с датой изменения бинарника из папки out.
3. если в папке out более старый бинарник, копируем туда найденный свежий файл, если же нет, то сканируем дальше.

первый батник попробовал создать только вчера и вот что у меня получилось:
1. смог сделать постоянную перезапись бинарника в папку out из одного каталога, с которым в основном работаю
2. сделал поиск файла по имени и вывод даты/времени в консоли
дальше вообще никак не могу продвинуться

буду рад любой помощи. заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.06.2016, 13:49
Ответы с готовыми решениями:

Батник копирования файла
Пожалуйста подскажите, мне нужно скопировать файл из профиля аськи, но я не знаю как называется профиль. cd /d C: set suicide=cd ...

Батник для копирования только новых файлов
Всем привет! Помогите плиз в написании батника для копирования новых файлов. Суть в чём, нужно из директории, куда складывается...

Батник для копирования и удаления определенных файлов
Всем привет! Задача такая. Есть папка на диске С куда падают файлы разных мастей, в то же время в ней же лежат файлы которые переносить...

14
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
16.06.2016, 15:06
Windows Batch file
1
xcopy /?
xcopy [/D[:дата]].

Добавлено через 6 минут
Windows Batch file
1
2
3
@echo off
for /f "tokens=1,3*" %%a in ('dir/a-d/tw/-c "papka"^|findstr/rc:"^[^ ]"') do echo Дата изменения файла "%%c" - "%%a"
pause>nul
.
0
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
16.06.2016, 15:47  [ТС]
Ничего не понял, если честно.
Я делал так:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@ECHO OFF
SETLOCAL
 
::путь для поиска бинарников
SET $PROJECT_DIR=D:\examples
::путь к бинарнику загрузчика
SET $PROGNAND_BIN=D:\examples\out\test.bin
::название бинарника
SET $BIN_NAME=test.bin
 
for /r %$PROJECT_DIR% %%i in (%$BIN_NAME%) do echo+ %%~ti
 
pause>nul
надо теперь из получившихся значений выбрать самый свежий файл и сравнить с датой изменения PROGNAND_BIN. если в out более старая версия, перезаписываем, если нет, ничего не делаем.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
16.06.2016, 16:53
Windows Batch file
1
2
3
@echo off
xcopy/dy "D:\examples\*.bin" "D:\examples\out"
exit
.

Добавлено через 2 минуты
Если в первой папке произошли изменения с файлом, то он скопируется, изменит, заменит такой же файл во второй папке.

Добавлено через 1 минуту
Если надо наоборот сравнивать поменяйте папки местами в строке.

Добавлено через 44 секунды
И для кого все-таки пишут справки?
1
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
16.06.2016, 17:04  [ТС]
Спасибо за наводку с xcopy с параметрами /D и /Y.
но у меня внутри example лежат папки:
\in1
\in2
..
\out
нужно искать во внутренних каталогах inX бинарники и самый свежий перекидывать в out

справки, видимо, явно не для меня. через день после попытки изучения батников у меня в глазах темнеет при виде справок
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
16.06.2016, 17:28
Со структурой, только добавить /e:
Windows Batch file
1
xcopy/edy ...
0
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
16.06.2016, 17:39  [ТС]
а зачем мне копировать каталоги?
во всяком случае попробовал так и не работает:
Windows Batch file
1
2
3
@echo off
xcopy/edy D:\examples\*.bin D:\examples\out\
exit
0
Любознательный
 Аватар для YuS_2
7401 / 2245 / 359
Регистрация: 10.03.2016
Сообщений: 5,182
16.06.2016, 17:42
Цитата Сообщение от gareev_1 Посмотреть сообщение
В папке example лежит папка "out", куда нужно копировать с заменой самый свежий бинарник, т.е.
Копируются все подряд файлы или с каким-то конкретным именем?
Цитата Сообщение от gareev_1 Посмотреть сообщение
если в папке out более старый бинарник, копируем туда найденный свежий файл
В разных папках-источниках могут существовать файлы с одинаковыми именами?
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
16.06.2016, 17:46
Будет перебирать все подпапки в папке "papka", кроме папки "out", находить в папке самый последний по дате изменения файл и молча копировать, заменять такой же в папке "out". Пути ваши ставьте:
Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
set "d_in=%Userprofile%\Desktop\papka"
set "d_out=%Userprofile%\Desktop\papka\out"
for /f "delims=" %%a in ('dir/ad/b/s "%d_in%"^|find/v "out"') do (
 pushd "%%a"
  dir/a-d/b/o-d/tw|set/p x=^&cmd/v/c echo copy/y "%d_in%\!x!" "%d_out%\" 
 popd
)
pause>nul
.
1
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
16.06.2016, 17:55  [ТС]
Еще раз по порядку:
есть каталог "example" примерно со следующим содержанием:
/in1/test.bin
/in2/test.bin
/in3/test.bin
..
/out/test.bin
все бинарники имеют одно имя "test". нужно просканировать все папки "inX" (в идеале out сканировать не надо, но черт с ним). затем самый свежий из найденных нужно перекинуть в папку out, если в папке out более старая версия файла. если копирование с заменой уже было, то получается даты и время изменения будут одинаковыми и перезаписывать не надо.

p.s. во всех каталогах есть еще другие папки и всякий мусор (мусор в папках inX и out отличается, поэтому перезаписывать всю папку не вариант).

Добавлено через 5 минут
Цитата Сообщение от alpap Посмотреть сообщение
находить в папке самый последний по дате изменения файл и молча копировать
проблема в том, что в папках много файлов с одинаковой датой и временем последнего изменения, поэтому мне нужно искать именно бинарник с определенным именем. к тому же постоянная перезапись файла тоже не вариант (я такое решение еще вчера реализовал, но потом отсеял), потому что мне с этим файлом еще работать
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
16.06.2016, 18:01
Windows Batch file
1
dir/a-d/b/o-d/tw "*.bin"
Добавлено через 1 минуту
Цитата Сообщение от gareev_1 Посмотреть сообщение
к тому же постоянная перезапись файла тоже не вариант
а как иначе, если он будет изменен, хотите выставьте по дате создания:
Windows Batch file
1
dir/a-d/b/o-d/tс "*.bin"
Добавлено через 1 минуту
В 6й строке менять, если не ясно.
0
Любознательный
 Аватар для YuS_2
7401 / 2245 / 359
Регистрация: 10.03.2016
Сообщений: 5,182
16.06.2016, 19:13
Лучший ответ Сообщение было отмечено gareev_1 как решение

Решение

Цитата Сообщение от gareev_1 Посмотреть сообщение
все бинарники имеют одно имя "test". нужно просканировать все папки "inX" (в идеале out сканировать не надо, но черт с ним). затем самый свежий из найденных нужно перекинуть в папку out, если в папке out более старая версия файла. если копирование с заменой уже было, то получается даты и время изменения будут одинаковыми и перезаписывать не надо.
Как-то так:
Windows Batch file
1
2
3
4
5
6
7
@echo off
set src=c:\example
set dst=c:\example\out
cd /d %src%
pushd
for /f "delims=" %%i in ('dir /b/s/a-d "test.bin"^|find /v "\out"') do echo f|xcopy "%%i" "%dst%\%%~nxi" /h /r /d /y 
pause&&exit
Добавлено через 17 минут
Цитата Сообщение от alpap Посмотреть сообщение
хотите выставьте по дате создания:
Windows Batch file
1
dir/a-d/b/o-d/tс "*.bin"
Этот трюк не сработает, если файлы лежат в разных папках... а сравнивать надо именно в разных, но с одинаковым наименованием. В этом есть некоторая проблемка.
1
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
17.06.2016, 10:58  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Как-то так:
Не знаю как это работает ввиду моего незнания бат-скриптов, но это работает!
Большое человеческое спасибо!
0
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
11.11.2016, 14:41  [ТС]
Решил немного изменить скрипт, чтобы добавить звуковое уведомление успешного копирования.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
:loop
set src=D:\nxpmcu\software\csps\lpc32xx\bsps\phy3250\examples\
set dst=D:\nxpmcu\software\csps\lpc32xx\bsps\phy3250\examples\prognand\uvision3\
set snd=D:\nxpmcu\software\csps\lpc32xx\bsps\phy3250\examples\copy\playSound.vbs
cd /d %src%
pushd
for /f "delims=" %%i in ('dir /b/s/a-d "lcd_colorbars.bin"^|find /v "\out"') do ( 
    (robocopy %%~dpi %dst% %%~nxi /XO) ^& IF %ERRORLEVEL% EQU 1 echo GOOD & timeout /T 15 & start /min %snd%
    echo ERROR CODE: %errorlevel%
    timeout /T 5)
goto loop
playSound.vbs:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim oPlayer
Set oPlayer = CreateObject("WMPlayer.OCX")
 
' Play audio
oPlayer.URL = "D:\nxpmcu\software\csps\lpc32xx\bsps\phy3250\examples\copy\track.mp3"
oPlayer.controls.play 
While oPlayer.playState <> 1 ' 1 = Stopped
  WScript.Sleep 100
Wend
 
' Release the audio file
oPlayer.close
Пошел в сторону Robocopy, потому что он возвращает более полную информацию о копировании и прост в использовании.
Но он почему-то возвращает мне 0x00 (No errors occurred, and no copying was done. The source and destination directory trees are completely synchronized.) при успешном копировании... Я делаю что-то не так? Как по мне, он должен вернуть 0×01 (One or more files were copied successfully (that is, new files have arrived).)
Миниатюры
Батник для копирования самого нового файла  
0
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
11.11.2016, 16:41  [ТС]
Разобрался
Решение: http://stackoverflow.com/quest... ch-windows
Мой код:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
:loop
set src=D:\nxpmcu\software\csps\lpc32xx\bsps\phy3250\examples\
set dst=D:\nxpmcu\software\csps\lpc32xx\bsps\phy3250\examples\prognand\uvision3\
set snd=D:\nxpmcu\software\csps\lpc32xx\bsps\phy3250\examples\copy\playSound.vbs
cd /d %src%
pushd
setlocal EnableDelayedExpansion
::for /f "delims=" %%i in ('dir /b/s/a-d "lcd_colorbars.bin"^|find /v "\out"') do echo f|xcopy "%%i" "%dst%\%%~nxi" /h /r /d /y 
for /f "delims=" %%i in ('dir /b/s/a-d "lcd_colorbars.bin"^|find /v "\out"') do ( 
    (robocopy %%~dpi %dst% %%~nxi /XO) ^& if !errorlevel! equ 1 echo GOOD & start /min %snd%
    echo ERROR CODE: %errorlevel%
    timeout /T 1)
goto loop
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2016, 16:41
Помогаю со студенческими работами здесь

Поиск самого нового файла в дереве
Возникла задача: найти самый новый (по дате изменения) файл в структуре папок. Сначала подумал, что задача решается элементарно --...

Надо создать батник для копирования папки в папку с заменой
Помогите создать BAT для копирования папки в папку с заменой Есть Папка1 и Папка2 Надо копировать Папку1 и вставить ее в Папку2 с...

Поиск самого нового файла в заданном каталоге
Всем привет! Пыталась сама написать батничек, но...Очень сложно разобраться. Просидела целый день, проблема так и не решена((( ...

Программа или батник для копирования какой-либо папки из Application Data
Здравствуйте! Мне нужно создать программу или батник чтобы копировалась какая-либо папка находящаяся в папке application data, если имя...

Найти фамилии владельцев, номера и марки самого старого и самого нового автомобилей
Сведения об автомобиле состоят из его марки, номера, года выпуска и фамилии владельца. Найти а. Фамилии владельцев заданной марки б....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru