Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2703
Благодарности: 1683

Профиль | Отправить 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
Пытаюсь получить время создания самой старой папки из цикла Set "TimeFile=%%~td"
Выяснил, что Dir сортирует папки по дате создания правильно.
Однако, при применении расширения переменной %%~td получаем отнюдь не время создания папки.
То есть ключи в команде Dir под For никак не влияет на значение %%~td
Просто Dir и WMIC дают одинаковые правильные результаты

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 30-05-2018 в 19:23.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:09, 30-05-2018 | #8