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

В каталоге и его подкаталогах найти и скопировать в отдельный подкаталог все файлы, созданные после 14:00

13.09.2012, 14:28. Просмотров 5082. Ответов 7
Метки нет (Все метки)

Здравствуйте, помогите пожалуйста решить лабораторные. Очень надо, я в этом ничего не понимаю.
Мне только диплом получить нада, обещаю не буду работать программисткой. Напишите решение, оч. прошу.

2. В каталоге, указанном первым параметром bat-файла, и его подкаталогах, найти файлы, созданные после 14 часов, скопировать их в отдельный подкаталог и заархивировать архиватором 7z. Вывести имена заархивированных файлов на экран.

Заранее спасибо.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2012, 14:28
Ответы с готовыми решениями:

В каталоге и его подкаталогах найти и скопировать в отдельный подкаталог все файлы, созданные после 14:00
В каталоге, который указан первым параметром bat-файла, и его подкаталогах, найти файлы, созданные...

В каталоге и его подкаталогах найти и скопировать в отдельный подкаталог все файлы, созданные после 14:00
Добрый вечер, нужна помощь в написании bat файла. На форуме нашла много похожих заданий, но ни один...

В каталоге и его подкаталогах найти и скопировать в отдельный подкаталог все файлы, созданные после 14:00
Здравствуйте! Требуется помощь в выполнении такой вот задачи: "В каталоге, указанном первым...

Скопировать имеющиеся в каталоге Windows и его подкаталогах растровые графические файлы (имеющие расширения .bmp, .jpg, .gif, .png) в каталог WinGr
Подскажите идею? Знаю как найти эти файлы в каталоге и его подкаталогах. А как эти найденные...

В каталоге Windows и во всех его подкаталогах найти все файлы с расширением .bmp и атрибутом "Только чтение"
Задание: Вывести на экран и в файл содержимое каталога и подкаталогов %Windows% с расширением .bmp...

7
StudAssistant
Эксперт
9811 / 7003 / 2319
Регистрация: 17.04.2006
Сообщений: 9,622
13.09.2012, 14:28
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
7
Dragokas
Эксперт WindowsАвтор FAQ
17078 / 7133 / 861
Регистрация: 25.12.2011
Сообщений: 10,936
Записей в блоге: 16
13.09.2012, 15:46 2
Цитата Сообщение от Ка Посмотреть сообщение
созданные после 14 часов
После 14.00 сегоднешнего дня?
0
Ка
0 / 0 / 0
Регистрация: 13.09.2012
Сообщений: 8
13.09.2012, 16:48  [ТС] 3
Цитата Сообщение от Dragokas Посмотреть сообщение
После 14.00 сегоднешнего дня?
да, после 14:00 любого дня.
0
Dragokas
Эксперт WindowsАвтор FAQ
17078 / 7133 / 861
Регистрация: 25.12.2011
Сообщений: 10,936
Записей в блоге: 16
18.09.2012, 11:26 4
Цитата Сообщение от Ка Посмотреть сообщение
и его подкаталогах
А что если в подкаталогах окажутся файлы с одинаковым именем?

Добавлено через 2 часа 56 минут
Обязательно ли именно по дате создания...
или по дате модификации файлов - допустимо?
1
18.09.2012, 11:26
Ка
0 / 0 / 0
Регистрация: 13.09.2012
Сообщений: 8
19.09.2012, 20:16  [ТС] 5
Ну я думаю, что одинаковых имен не окажется, надеюсь, это же просто учебная программа.
Опять же мне кажется, что дата модификации тоже можно.
0
Dragokas
Эксперт WindowsАвтор FAQ
17078 / 7133 / 861
Регистрация: 25.12.2011
Сообщений: 10,936
Записей в блоге: 16
22.09.2012, 00:51 6
Я так однозначно условие и не понял.
Вот варианты:
Файлы, модифицированные:
1) после 14.00 и только в конкретно указанный день.
2) после 14.00 указанной даты вплоть до текущего дня и текущего времени.
3) которые старее 14.00 указанной даты.

Сделал по варианту № 2.
Информации выводит немного больше, чем указано в задании.

Хух, вот мой небольшой скриптик:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
@echo off
SetLocal EnableDelayedExpansion
 
::Задаем исходный каталог, где будем искать файлы рекурсивно
set $DirSource=e:\2 2
::Задаем целевой каталог, куда будем складывать 
set $DirDest=e:\1 1
::Полное имя архива
set $PathArch=e:\1 1\myArchive.zip
::Степень сжатия файлов (3 - минимальная, 5 - нормальная, 7 - максимальная)
set Level=5
 
::Задайте дату и время, после которой следует выполнять операции с файлами
set date0=21.09.2012
set time0=14:00:00
Echo Установлены граничные параметры: Дата - %date0% Время - %time0%
Echo.
 
::::Работаем с граничным временем
::Разбиваем время на часы, минуты, секунды
Call :parse_time hh0 min0 ss0 %time0%
::Переводим время в секунды
Call :toSec %hh0% %min0% %ss0% Msec
::Переводим время в число
Call :date_into_long %date0% Mdat
 
::Определяем расположение архиватора 7Zip через реестр
For /F "UseBackQ Tokens=2*" %%A In (`Reg Query "HKCU\Software\7-Zip"^|Find /I "Path"`) Do Set $7Zip=%%B
if not defined $7Zip (echo Архиватор 7Zip не установлен & pause>nul & goto :eof)
::Добавляем бекслэш \ если его нет (установщики msi и exe по-разному прописывают путь в реестре)
if %$7Zip:~-1% NEQ \ Set $7zip=%$7Zip%\
 
Set $AtLeastOneFile=False
::обходим рекурсивно все файлы
for /r "%$DirSource%" %%i in (*) do (
  set $Flag=False
  rem Получаем дату и время модификации файла
  Call :getFileTime "%%i" Fdate Ftime
  rem Преобразуем данные модификации файла
  Call :parse_time hh0 min0 ss0 !Ftime!
  Call :toSec !hh0! !min0! !ss0! Fsec
  Call :date_into_long !Fdate! FdateLong
  rem Определяем, если дата файла > установленной, либо дата = уст., а время > уст.
  rem FdateLong - числовой эквивалент даты файла (в формате yyyymmdd)
  rem Mdat - установленная граничная дата
  rem Fsec - время модификации файла в секундах
  rem Msec - установленное граничное время в секундах
  echo Проверяем файл %%i. !Fdate! !Ftime!
  if !FdateLong! GTR %Mdat% (
      set $Flag=True
    ) else (
      if !FdateLong! EQU %Mdat% if !Fsec! GTR %Msec% Set $Flag=True
  )
  if !$Flag!==True (
      >Nul copy "%%i" "%$DirDest%" && Set $AtLeastOneFile=True && (
        Echo                                                                 Успех
        Echo %%i готов к архивации.
      )
    ) else (
      Echo Не удовлетворяет условиям.
  )
  echo. 2>nul
)
Echo Проверка завершена.
::Хотя бы один файл был скопирован?
if %$AtLeastOneFile%==True (
    Echo Начинаю процесс архивации следующих файлов:
    Dir /b "%$DirDest%\*.*"
    Echo.
    >Nul "%$7zip%7z.exe" a -tzip -mx%Level% "%$PathArch%" "%$DirDest%\*.*"
    Echo Создание архива "%$PathArch%" завершено.  
  ) else (
    Echo Нет файлов, подходящих под условия для архивации.
)
Echo.
Pause
goto :eof
 
:toSec
::%1 - hh; %2 -  min; %3 - ss; %4 - to var
set /a %4=%1*60*60+%2*60+%3
exit /b
 
:parse_time
::%1 - hh; %2 -  min; %3 - ss; %4 - from var
set t=%4
if %t:~1,1%==: (set t=0%4)
::Обход ошибки представления числа в 8-ричной СС
set %1=1%t:~0,2%
set /a %1-=100
set %2=1%t:~3,2%
set /a %2-=100
set %3=1%t:~6,2%
set /a %3-=100
exit /b
 
:getFileTime
:: %1=file %2=var (FileDate) %3 - var (FileTime)
::Обход ошибки пробелов в пути к файлу
chdir /d "%~dp1"
set $FName=%~nx1
::Обход ошибки пробелов в имени файла
set $FName=%$FName: =?%
for /f "delims=" %%a in ('where /T %$FName%') do (
  for /f "tokens=1,2,3" %%i in ("%%a") do (
    set %2=%%j
    set %3=%%k
  )
)
exit /b
 
:date_into_long
::%1 - date; %2 - to var
::making long number like yyyymmdd
for /f "tokens=1-3 delims=." %%i in ("%1") do (
  set dd=%%i
  set mm=%%j
  set yyyy=%%k
)
::Если день - однозначное число, тогда дописываем 0
if "%dd:~1,1%"=="" set dd=0%dd%
::Если месяц - однозначное число, тогда дописываем 0
if "%mm:~1,1%"=="" set mm=0%mm%
::Если год - двухзначное число, тогда дописываем 19 или 20
if "%yyyy:~3,1%"=="" (
  set /a Nyyyy=1%yyyy%
  set /a Nyyyy-=100
  if !Nyyyy! GEQ 50 (set yyyy=19%yyyy%) else (set yyyy=20%yyyy%)
)
set /a %2=%yyyy%%mm%%dd%
exit /b
Цитата Сообщение от Ка Посмотреть сообщение
надеюсь, это же просто учебная программа.
А меня всегда и все в боевой готовности
2
Ка
0 / 0 / 0
Регистрация: 13.09.2012
Сообщений: 8
23.09.2012, 16:46  [ТС] 7
Большое спасибо я сама никогда не поняла бы как это делается, а теперь всё ясно (ну не совсем всё, но достаточно ) Теперь я разберусь. пошла разбираться
0
Dragokas
Эксперт WindowsАвтор FAQ
17078 / 7133 / 861
Регистрация: 25.12.2011
Сообщений: 10,936
Записей в блоге: 16
23.09.2012, 17:04 8
Цитата Сообщение от Ка Посмотреть сообщение
а теперь всё ясно (ну не совсем всё, но достаточно )

Оно то и понятно. Я и сам бы небыстро разобрался, если б мне такой код подсунули -)

Я в принципе уверен, что можно как-то совсем по-проще,
но в данном случае все (или почти все) учтено.

Из не совсем родного только утилита от Майкрософт Where, которой может не быть в системе XP.
Ну если что можно заменить на for ...~t. Скажете, если это будет критично.
И само собой архиватор 7z должен быть установлен.
0
23.09.2012, 17:04
StackOverflow
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2012, 17:04

В заданном каталоге и его подкаталогах найти и удалить файлы c указанным именем и с определёнными расширениями
Здравствуйте) Вот такое задание у меня: В заданном каталоге и его подкаталогах найти и удалить...

В текущем каталоге создать подкаталог с номером года, указанным в командной строке, перенести в него все файлы за год
Задача собственно такая: В текущем каталоге создать подкаталог с номером года, указанным в...

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


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

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

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