|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Создать скрипт, который выполняет следующее |
|
CMD/BAT - [решено] Создать скрипт, который выполняет следующее
|
Новый участник Сообщения: 2 |
Профиль | Отправить PM | Цитировать Нужно создать скрипт, который выполняет следующее: на вход пакетному файлу приходит путь к каталогу, дата формата DD.MM.YYYY и второй каталог. Найти файлы в указанном каталоге, созданные раньше указанной даты, скопировать их в другой указанный каталог и добавить в имя файлов дату их создания.
Основной вопрос в том, как мне можно получить файлы, созданные раньше определённой даты? Например, когда я делаю Скрытый текст
for /f %%S in ('dir /b') do (
set D=%%~tS set D=%D:~0, 2% if %D% LEQ %DT% ( copy %P1%%%~NXS %P2% ) ) в переменную D у меня ничего не записывается, и строка выводит это как D=~0, 2 Помогите, пожалуйста, пробовал и delayed expansion, вроде как не помогает. Спасибо. |
|
Отправлено: 20:35, 17-10-2018 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата flesh_royal1:
|
|
Отправлено: 20:53, 17-10-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Неужели не существует более краткого решения? Мне нужно выполнить более одной операции над одним и тем же файлом, а forfiles позволяет производить операцию только один раз.
Цитата Busla:
|
|
Отправлено: 22:37, 17-10-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Busla, forfiles работает не с датой/временем создания.
Цитата flesh_royal1:
Более краткое решение :lol:
@echo off setlocal enableextensions enabledelayedexpansion set sSourceFolder=%~1 set sDestFolder=%~2 set sDateCreatedBefore=%~3 for %%i in ("sSourceFolder" "sDestFolder" "sDateCreatedBefore") do if not defined %%~i ( call :Usage exit /b 1 ) if not exist "%sSourceFolder%\." ( echo Can't find source folder [%sSourceFolder%]. exit /b 2 ) if not exist "%sDestFolder%\." ( echo Can't find destination folder [%sDestFolder%]. exit /b 3 ) echo %sDateCreatedBefore%|>nul 2>&1 findstr.exe /r /b /e /c:"[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9][0-9]" || ( echo Third parameter [%sDateCreatedBefore%] probably not a date in DD.MM.YYYY template. exit /b 4 ) set sSourceDrive=%sSourceFolder:~0,2% set sSourcePath=%sSourceFolder:~2%\ set sDateCreatedBefore4Wbem=%sDateCreatedBefore:~6,4%%sDateCreatedBefore:~3,2%%sDateCreatedBefore:~0,2% for /f "usebackq delims=" %%i in ( `2^>nul wmic.exe DataFile where "Drive='%sSourceDrive%' AND Path = '%sSourcePath:\=\\%' AND CreationDate < '%sDateCreatedBefore4Wbem%'" get Name /value ^| 2^>nul find.exe /i "Name="` ) do for /f "tokens=2 delims==" %%j in ("%%~i") do ( call :CopyFile "%%~j" ) endlocal exit /b 0 :Usage echo Usage: %~nx0 ^<Source folder^> ^<Destination folder^> ^<Date created before^> exit /b :CopyFile setlocal enableextensions enabledelayedexpansion set sSourceFile=%~1 for /f "usebackq delims=" %%i in ( `2^>nul wmic.exe DataFile "%sSourceFile:\=\\%" get CreationDate /value ^| 2^>nul find.exe /i "CreationDate="` ) do for /f "tokens=2 delims==+-." %%j in ("%%~i") do ( set sCreationDate=%%~j set sNewFileName=%~n1_!sCreationDate:~0,8!%~x1 echo Copy source file [%sSourceFile%] into destination folder [%sDestFolder%] as [!sNewFileName!] >nul copy /y "%sSourceFile%" "%sDestFolder%\!sNewFileName!" ) endlocal exit /b 0 Цитата flesh_royal1:
P.S. Скажите Вашему преподавателю, что он P.P.S. А если он примет решение с forfiles — то ещё и лопух . P.P.P.S. WSH, PowerShell — наше всё в данном случае. |
||
Последний раз редактировалось Iska, 18-10-2018 в 00:35. Отправлено: 00:19, 18-10-2018 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Скрипт, который изменяет значение ячейки в Exсel | romfus | Скриптовые языки администрирования Windows | 4 | 21-03-2018 16:23 | |
CMD/BAT - [решено] Bat-ик который постоянно проверяет запущен ли процесс и выполняет действия | Bastel | Скриптовые языки администрирования Windows | 1 | 16-01-2017 22:36 | |
VBS/WSH/JS - [решено] Нужен управляющий скрипт который перезапускает программу. | andrewua12 | Скриптовые языки администрирования Windows | 10 | 06-07-2009 19:25 | |
[решено] Нужен управляющий скрипт который перезапускает программу. | andrewua12 | AutoIt | 3 | 04-07-2009 16:09 | |
Скрипт который может сам себя обновить | BuilderMan | Вебмастеру | 8 | 30-09-2006 13:44 |
|