|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Сравнить несколько папок по дате создания и вывести самую старую |
|
CMD/BAT - [решено] Сравнить несколько папок по дате создания и вывести самую старую
|
Новый участник Сообщения: 26 |
Профиль | Отправить PM | Цитировать Добрый день, имеется несколько переменных (пути папок на разных локальных дисках) нужно получить дату создания самой старой из них
%SkladC%="C:\Sklad\folder 1\" :: создана 23.05.18 %SkladD%="D:\Sklad\folder 2\" :: создана 22.05.18 %SkladE%="E:\Sklad\folder 3\" :: создана 20.05.18 %SkladF%="" :: нет такой папки на диске F %SkladG%="G:\Sklad\folder 4\" :: создана 24.05.18 Иными словами, нужно получить дату создания папки E:\Sklad\folder 3\ т.к. она самая "старая" и записать её в переменную Доп ограничения: что переменная может быть пустой (в примере %SkladF%), в имени папки есть пробел (в примере "folder_1") Пытался сделать по аналогии с решениями из этой темы: тема1 тема2 (сторонний ресурс) но не получается... |
|
Отправлено: 10:32, 23-05-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:38, 23-05-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:56, 23-05-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать У… Как всё
|
Отправлено: 11:53, 23-05-2018 | #4 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Iska, собственно потому что не могу придумать решение "в лоб" знаний не хватает (читайте как нет) поэтому и строю велосипед из костылей, множество ненужных переменных создается чтобы понять как оно работает на каждом этапе... Пытаясь объединить кусочки кода найденные на форумах с решением подобных задач
|
|
Отправлено: 12:05, 23-05-2018 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать wlad1164, тогда начните с описания самой задачи, которую Вам требуется решить.
|
Отправлено: 12:07, 23-05-2018 | #6 |
Забанен Сообщения: 793
|
Примерное решение задачи.
@echo off setlocal enabledelayedexpansion call:setVariables for /f "tokens=1,* delims==" %%i in ('set sklad') do ( for /f %%k in ('dir /ad/tc %%j ^| findstr /irc:"folder"') do ( call:convertToJulian %%k set "!julian!=%%j" ) ) set "ts=0" for /f "tokens=1,* delims==" %%i in ('set^ ^| findstr /irc:"[0-9].*\sklad"') do if %%i gtr !ts! set "ts=%%i" for /f "tokens=1,* delims==" %%i in ('set^ ^| findstr /brc:"!ts!"') do ( for /f "tokens=1" %%k in ('dir /ad/tc "%%j"^ ^| findstr /irc:"folder"') do set "latest=%%j %%k" ) echo:!latest! endlocal exit /b :setVariables for /l %%i in (65, 1, 90) do ( cmd /c exit /b %%i set "l=!=exitcodeascii!"&set "d=!l!:\Sklad" if exist "!d!" set "Sklad!l!=!d!" ) exit /b :convertToJulian set "day=%~1" set /a "dd=%day:~0,2%, mm=%day:~3,2%, yy=%day:~6,4%" if %mm% lss 3 set /a "mm+=12, yy-=1" set /a "a=yy/100, b=a/4, c=2-a+b, e=36525*(yy+4716)/100, f=306*(mm+1)/10" set /a "julian=c+dd+e+f-1524" exit /b |
Отправлено: 12:41, 23-05-2018 | #7 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать wlad1164,
Решаю задачу: На логических дисках компьютера возможно имеются определённые папки, например, с именем "Sklad". Необходимо найти в них самую старую по времени создания подпапку. Вот рабочее решение
@Echo Off cls Set "FN0=Sklad" FOR /F "usebackq tokens=1,*" %%i IN (`fsutil fsinfo drives`) DO Call :AllD "%FN0%" "OldDate" "OldDir" %%j Echo "%OldDate%" "%OldDir%" Pause GoTo :Eof :AllD Set /A Code=2 Set "CDTold=99999999999999" Set "FNold=Folder %1 not found in all disks" :Begin If "%4"=="" GoTo :End If Not Exist "%4\%1" (Shift /4 &GoTo :Begin) If Not %Code% EQU 0 (Set /A Code=1 &Set "FNold=Subfolders in Folder %1 not found in all disks") Pushd "%4%~1" FOR /F "usebackq delims=" %%d IN (`2^>nul Dir /B /A:D /O:-D /T:C`) DO (Set /A Code=0 &Set "FN=%4%~1\%%d") For /f "tokens=1,2* delims=,." %%a in ('wmic fsdir where "name='%FN:\=\\%'" get 'CreationDate' /format:csv') Do ( If /I "%%a"=="%ComputerName%" Set "CDT=%%b" ) If "%CDT%" LSS "%CDTold%" (Set "CDTold=%CDT%" &Set "FNold=%FN%") Popd Shift /4 GoTo :Begin :End Set "%~2=%CDTold:~0,4%.%CDTold:~4,2%.%CDTold:~6,2% %CDTold:~8,2%:%CDTold:~10,2%:%CDTold:~12,2%" Set "%~3=%FNold%" Exit /B %Code% Похоже, наткнулся на неприятность при работе с CMD
Вот тестовый код:
@Echo Off cls Set "FN0=E:\_Скопировано.wd" Pushd "%FN0%" Echo: Echo: FOR /F "usebackq delims=" %%d IN (`2^>nul Dir /B /A:D /O:-D /T:C`) DO Set "OldFile=%%d" &Set "TimeFile=%%~td" Echo "%TimeFile%" "%OldFile%" Echo =================== Echo: Set "DirName=%FN0%\%OldFile%" Set "DirName=%DirName:\=\\%" wmic fsdir where "name='%DirName%'" get 'CreationDate' /format:csv Echo =================== Echo: Dir /A:D /O:-D /T:C Popd Pause Выяснил, что Dir сортирует папки по дате создания правильно. Однако, при применении расширения переменной %%~td получаем отнюдь не время создания папки. То есть ключи в команде Dir под For никак не влияет на значение %%~td Просто Dir и WMIC дают одинаковые правильные результаты |
------- Последний раз редактировалось megaloman, 30-05-2018 в 19:23. Отправлено: 19:09, 30-05-2018 | #8 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) | DIMM2005 | Программное обеспечение Windows | 36 | 03-01-2020 16:54 | |
CMD/BAT - Резервирование файлов с сравнением по дате создания | Атриарх | Скриптовые языки администрирования Windows | 5 | 21-09-2016 19:21 | |
Прочие БД - Access. Отчет. Сделать выборку по дате, но без группировки. Вывести в Excel в ячейку | JaneSu | Программирование и базы данных | 2 | 01-05-2016 18:56 | |
CMD/BAT - Сортирование файлов по папкам (копирование в многоуровневые папки по дате создания) | Systems | Скриптовые языки администрирования Windows | 18 | 03-10-2014 11:37 | |
Переименование группы файлов по дате создания | Serg2010 | AutoIt | 1 | 10-04-2012 10:25 |
|