Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 26.04.2016
Сообщений: 42
1

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

08.07.2016, 12:20. Показов 1188. Ответов 5
Метки нет (Все метки)

Здравствуйте. Возникла необходимость в создании кода на batch, который делает следующее. Сначала код проверяет главную папку, содержащую все необходимые в рамках программы файлы. Затем мы просматриваем содержимое всего каталога users и подкаталогов на предмет существования файла с тем же названием и разрешением, но более поздней датой изменения. Если такой находится, переносим в третью папку final. Если нет, переносим туда файл прямиком из главной папки. Пока начал с такого скрипта и появились затруднения - не получается извлечь год, месяц и день из строки, получающей время модификации файла (9 и 16 строки работают неправильно).

Код:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@ECHO OFF
CD D:\summer\disk\users\
set I=hello darkness
set Y=my old friend
 
for /r D:\summer\disk\users\usr\games\slovo %%Y in (*.docx ) do (
    set slovoName=%%~nY
    set slovoTime=%%~tY
    set slovoYear=%slovoTime:~6,10%
    set slovoTime
    set slovoYear
 
    for /r D:\summer\disk\users %%I in (*.docx ) do (
        set fileName=%%~nI
        set fileTime=%%~tI
        set fileYear=%fileTime:~6,10%
        set fileYear
    )
)
pause
Вывод в консоль:
Код
slovoTime=07.07.2016 00:17
slovoYear=~6,10
fileYear=~6,10
fileYear=~6,10
fileYear=~6,10
fileYear=~6,10
fileYear=~6,10
slovoTime=07.07.2016 01:32
slovoYear=~6,10
fileYear=~6,10
fileYear=~6,10
fileYear=~6,10
fileYear=~6,10
fileYear=~6,10
slovoTime=07.07.2016 01:32
slovoYear=~6,10
fileYear=~6,10
fileYear=~6,10
fileYear=~6,10
fileYear=~6,10
fileYear=~6,10
Добавлено через 21 час 25 минут
Я не очень разобрался, почему это так, но сработало следующим образом. Прописал setlocal EnableDelayedExpansion и заменил % на ! в строках с ошибками. Такой вариант кода выдает правильный год, только непонятно, почему пришлось поставить 6,5. Вообще, вероятнее даже 6,4 , так как с 5 он еще пробел после 2016 захватывает, похоже.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
setlocal EnableDelayedExpansion
@ECHO OFF
set I=privet
set Y=poka
 
for /r D:\summer\slovo %%I in (*.exe1) do (
    set slovoName=%%~nI
    set slovoMod=%%~tI
    set slovoName
    set slovoMod
    set slovoYear=!slovoMod:~6,5!
    set slovoYear
 
    
    for /r D:\summer %%Y in (*exe1) do (
        set fileName=%%~nY
        set fileMod=%%~tY
        set fileName
        set fileMod
    
    )
)
pause
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2016, 12:20
Ответы с готовыми решениями:

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

Поиск файлов на всех дисках и вывод найденных файлов в одну строку
using System; using System.IO; using System.Collections.Generic; using System.ComponentModel;...

Поиск на диске файлов с расширениями .txt и .docx и создание списка имён найденных файлов
Помогите, нужно создать bat файл, который ищет на диске файлы *.txt *docx а потом создаёт список с...

Поиск одноименных файлов, суммирование и вывод ошибок
Доброе время суток знатокам. Имею такую задачку заключается в таком алгоритме : Есть...

5
4042 / 2033 / 642
Регистрация: 26.04.2015
Сообщений: 6,583
08.07.2016, 12:57 2
novac_33,
Вообще не понимаю что вы там крутите, код примерно такой должен быть
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set "p_osn=papka_osn"
set "p_u=papka_user"
for /f "tokens=1,3*" %%a in ('dir/a-d/od/tw/-c "%p_osn%"^|findstr/rc:"^[^ ]"') do (
 for /f "delims=" %%d in ('dir/a-d/b/s "%p_u%"^|find "%%~nxc"') do (
  if exist "%%d" (
   pushd "%%~dpd"
    for /f "tokens=1,3*" %%A in ('dir/a-d/s/od/tw/-c^|findstr/rc:"^[^ ]"') do (
     for /f "delims=" %%B in ('powershell "(New-TimeSpan -Start %%A -End %%a).Days"') do if %%B geq 1 echo copy "%%d" "now_papka"
    )
   popd
  )
))
pause
, но он еще не доработан, может кто допилит, мне сейчас некогда. а вы поразмышляйте пока. если и вытащите даты изменения файлов, как интересно будете их сравнивать, если бы у вас полностью структура совпадала. можно было-бы в два счета с помощью xcopy сделать, вероятно и на robocopy получится, но это ждите спецов по ней.
1
2 / 2 / 0
Регистрация: 26.04.2016
Сообщений: 42
08.07.2016, 13:43  [ТС] 3
alpap, насчет robocopy и xcopy верно, но история в том, что ей запрещено пользоваться в рамках задания. Вытаскиваю и сравниваю даты изменения файлов через преобразование строк и много if-ов друг в друге. Наверное, не очень оптимизированно получается, да?
Windows Batch file
1
2
3
4
5
if !slovoName!==!fileName! (
    if !slovoYear!==!fileYear! (
    echo ravno
    )
) else (echo ne)
В задумке, дальше планировал продолжать if-ы вплоть до минуты изменения файла. Если совпадает вплоть до минуты, то оставляю тот вариант, что в главной папке (slovo), копирую его в папку final и стираю оба предыдущих файла.
0
2 / 2 / 0
Регистрация: 26.04.2016
Сообщений: 42
09.07.2016, 23:45  [ТС] 4
Короче говоря, что-то совсем уродское и примитивное получилось, через дополнительную переменную и "баллы" за совпадение-превышение даты файла из папки slovo. Плюс пришлось дополнительно обрабатывать строки, которые могут содержать числа 01, 02... 09 из-за ошибки "Неправильное число. Числовые константы должны быть десятичными (17) шестнадцатеричными (0x11),или восьмеричными (021)" таким образом:
Windows Batch file
1
2
3
4
5
6
7
8
9
set /a fMon=1!fileMod:~3,2!
set /a fDay=1!fileMod:~0,2!
set /a fHour=1!fileMod:~11,2!
set /a fMin=1!fileMod:~14,2!
   
set /a fileMon=!fMon! - 100 
set /a fileDay=!fDay! - 100
set /a fileHour=!fHour! - 100
set /a fileMin=!fMin! - 100
Код подкрепил файлом.
0
Вложения
Тип файла: txt finder.txt (5.3 Кб, 6 просмотров)
4042 / 2033 / 642
Регистрация: 26.04.2015
Сообщений: 6,583
10.07.2016, 00:31 5
novac_33,
9я строка моего кода заменяет все 139 вашего, есть ли смысл извращаться?
1
2 / 2 / 0
Регистрация: 26.04.2016
Сообщений: 42
10.07.2016, 00:35  [ТС] 6
alpap, есть смысл учиться не писать говнокод, буду продолжать разбираться, спасибо. с:
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2016, 00:35

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Сравнение имен файлов в двух каталогах
Подскажите, пожалуйста, как можно сравнить по разным параметрам (расширение,имя) файлы, находящиеся...

Поиск файлов в каталогах и подкаталогах
Как это можно реализовать? :)

Поиск файлов в каталогах и подкаталогах
Люди у меня есть своя база полноценных текстовых документов с каким-то названием. Нужено...

Поиск в тексте DOC-файлов последовательностей символов по шаблону и поиск найденных в TXT-файле (с логом)
Уважаемые программисты! Очень нужен bat-файл или скрипт, который решает такую задачу: ...

Поиск в текстовых файлах символьных групп по шаблону и последующий поиск найденных в именах файлов (с логом)
Господа программисты! Прошу помочь в таком вопросе! Исходные данные: Последовательности...

Найти и вывести имена одинаковых файлов в двух каталогах
Здравствуйте! Помогите пожалуйста решить такую задачу: Никак не могу сообразить. Вот, что...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.