Показать полную графическую версию : Поиск самого свежего файла
megaloman
16-08-2018, 22:32
Vasya1998, @Echo Off
cls
Set "BoxIn=D:\CMD_Forum"
Set "Mask=*.*"
Set "NFname="
Set "DTfile="
Set /A NFdate=0, NFtime=0
For /F "usebackq delims=" %%j IN (`2^>nul Dir /A:-D /B /O:-D /T:W "%BoxIn%\%Mask%"`) DO (Call :NewFile "%BoxIn%\%%j" &GoTo :Cont)
:Cont
For /F "usebackq delims=" %%i IN (`2^>nul Dir /A:D /S /B /O:-D /T:W "%BoxIn%"`) DO Call :DirFiles "%%i" "%Mask%"
Echo %DTfile% %NFname%
Pause
GoTo :Eof
:DirFiles
For /F "usebackq delims=" %%j IN (`2^>nul Dir /A:-D /B /O:-D /T:W "%~1\%~2"`) DO (Call :NewFile "%~1\%%j" &GoTo :Eof)
GoTo :Eof
:NewFile
rem Echo %~t1 %1
Set "Fdate=%~t1"
Set /A Ftime=1%Fdate:~11,2%%Fdate:~14,2%
Set /A Fdate=%Fdate:~6,4%%Fdate:~3,2%%Fdate:~0,2%
If %Fdate% LSS %NFdate% GoTo :Eof
If %Fdate% EQU %NFdate% If %Ftime% LSS %NFtime% GoTo :Eof
Set /A NFdate=%Fdate%, NFtime=%Ftime%
Set "NFname=%~1"
Set "DTfile=%~t1"
GoTo :EofВ указанной папке с подпапками будет найден самый последний по времени изменения файл по указанной маске - Вы не уточняли, о каких файлах идёт речь, так что путь к папке и маску файлов напишите свои
переписать батник таким образом, чтобы он находил последний созданный файл во вложенных папках. »
Вот поправленный батник:
@echo off
set "src=C:\SourceMainDir"
set "dst=C:\DestinationDir"
for /f "delims=" %%i in ('powershell -ex bypass -c "&{(dir '%src%' -file -rec|sort -prop creationtime -desc).fullname[0]}"') do echo xcopy "%%i" "%dst%"
echo excellent!
pause&exit
в боевом применении, после do, команду echo следует удалить.
YuS_2, фокус не удастся: файлы по дате, конечно, сортируются, но только в пределах того каталога, в котором находятся. То есть, таким образом мы получим самый свежий файл из… «корневого» для dir каталога (если в нём нет файлов — получим самый свежий файл из первого каталога, и там нет файлов — из первого вложенного в него, нет вложенных — из второго и т.д.). Это не массив объектов и не конвеер PowerShell, увы :).
Это не массив объектов и не конвеер PowerShell, увы »
А, да, верно, совсем упустил из вида рекурсию! Это же cmd :)
При рекурсивном просмотре файлов, они же выводятся вместе с путями, при этом сначала сортируются по именам каталогов в пути, что бы там в ключах ни нарисовали... казалось бы, какого фига? Но увы, это ведь cmd... :)
Отсюда вывод: переходите на powershell, чтобы не было так мучительно больно... и тоскливо. :)
Поправил исходное решение...
Отсюда вывод: переходите на powershell, чтобы не было так мучительно больно... и тоскливо. »
Таки да. Я не особо люблю PowerShell, но выбора, в общем-то, и нет.
но выбора, в общем-то, и нет »
Ну, выбор-то есть всегда (cygwin, например, а в десятке так и вообще уже и cygwin не особо нужен)... вопрос в только в том, что предпочтительнее...
cygwin, например, »
Чур меня, чур! ;).
Vasya1998
17-08-2018, 10:41
то вот вариант »
Спасибо, вам, большущее!
Оно работает. :)
поправленный батник »
Оно не заработало:
xcopy "Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "file"." "C:\DestinationDir"
xcopy "строка:1 знак:32" "C:\DestinationDir"
xcopy "+ &{(dir 'C:\SourceMainDir' -file <<<< -rec|sort -prop creationtime -desc).fullname[0]}" "C:\DestinationDir"
xcopy " + CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException" "C:\DestinationDir"
xcopy " + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand" "C:\DestinationDir"
xcopy " " "C:\DestinationDir"
Но, в любом случае, большое спасибо.
А вообще, ребята, какие же вы красавчики, что помогаете. Спасибо вам всем за то что вы есть такие добрые.
Оно не заработало »
оно работает, если powershell обновить... :)
ну, а если случай запущенный (WinXP), то можно так:
@echo off
set "src=C:\SourceMainDir"
set "dst=C:\DestinationDir"
for /f "delims=" %%i in ('powershell -ex bypass -c "&{(dir '%src%' -rec|?{!$_.psiscontainer}|sort -prop creationtime -desc).fullname[0]}"') do echo xcopy "%%i" "%dst%"
echo excellent!
pause&exit
Но, кстати... если уж powershell на борту, то и всю задачу проще на него перевести...
Чур меня, чур! »
таладна, чего его бояться? :)
вполне функционально и достаточно производительно... ну, если уж powershell совсем не в радость...
таладна, чего его бояться?
вполне функционально и достаточно производительно... ну, если уж powershell совсем не в радость... »
Ну, ежели токмо по анекдоту — «Слышь, Вась, по-моему и до аэродрома не так уж далеко» :lol:.
Vasya1998
17-08-2018, 12:23
если powershell обновит »
У меня win7 и версия:
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
Но может быть, это связано с тем, что я запускал как cmd?
У меня с PowerShell вообще никак. Я так то админство много лет назад бросил, но вот случилось, что понадобилось, а я админил когда он только-только появился и всем хватало батников. :)
У меня win7 и версия:
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1 »
На будущее можете обновить до пятой.
когда он только-только появился и всем хватало батников. »
Не хватало. Причём категорически не хватало не только «батников», но и WSH, и KiXtart, и кучи Support Tools'ов и Resource Kit'ов.
Но может быть, это связано с тем, что я запускал как cmd? »
никак не связано, оно и написано в виде гибрида, т.е. для cmd
А в powershell 2.0, просто не поддерживается параметр -file у командлета Get-ChildItem, потому и не взлетело... обновите, как выше посоветовали, до версии 5.1, как минимум...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.