С forfiles
я не вижу возможности выполнить вашу задачу по возвращению новейшего (самого последнего) количества файлов.
Итак, моя идея для этого подхода такова:
dir /B /A:-D /T:C /O:-D
для извлечения голого списка (/B
) файлов (без каталогов, /A:-D
), отсортированных по дате создания (/T:C
; если вы хотите использовать последнюю дату модификации, просто удалите /T:C
) в порядке убывания (/O:-D
), что означает сначала самые новые элементы, for /F "eol=| delims="
, чтобы собрать и проанализировать вывод dir
по строкам, то есть файл по файлу, не за исключением имен файлов, начинающихся с ;
(eol=|
, |
является незаконным для имен файлов), а не для разбиения имен файлов, содержащих пробелы типа SPACE или TAB (delims=
); if
внутри цикла, чтобы проверить, достиг ли счетчик желаемого предельного числа, и в случае, если оно goto
; Вот связанный код :
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Define global constants here:
set "TARGETPATH=\path\to\files\*.*"
set /A "TOTAL=10"
set /A "COUNT=0"
for /F "eol=| delims=" %%F in ('
dir /B /A:-D /T:C /O:-D "%TARGETPATH%"
') do (
echo(%%F
set /A COUNT+=1
setlocal EnableDelayedExpansion
if !COUNT! GEQ %TOTAL% (
endlocal
goto :NEXT
) else (
endlocal
)
)
:NEXT
endlocal
exit /B
Я переключил задержанное расширение переменной в цикле for /F
, чтобы избежать проблем, когда имена файлов файлов содержат восклицательные знаки !
, которые теряются в line echo(%%F
, если он включен.
Следующий код выполняет исходную задачу вашего вопроса, а именно: удалять файлы в заданном каталоге, но сохранять последнее число файлов:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Define global constants here:
set "TARGETPATH=\path\to\files\*.*"
set /A "TOTAL=10"
set "SKIPOPT=" & if %TOTAL% GTR 0 set "SKIPOPT=skip=%TOTAL% "
for /F "%SKIPOPT%eol=| delims=" %%F in ('
dir /B /A:-D /T:C /O:-D "%TARGETPATH%"
') do (
del /P "%%F"
)
endlocal
exit /B
Поскольку for /F
поддерживает skip=
, чтобы пропустить указанное количество строк, и поэтому файлы в нашей ситуации, будем использовать его. Он указан косвенно здесь через переменную SKIPOPT
, которая содержит всю строку параметров, такую как skip=10
(при условии, что для параметра TOTAL
установлено значение 10
). Запрос if %TOTAL% GTR 0
реализован для того, чтобы сценарий не сработал, если TOTAL
- 0
, потому что for /F
не принимает параметр skip=0
.
Переключатель /P
на Команда del
позволяет отобразить подсказку Delete (Y/N)?
для целей тестирования. Если вам не нужны какие-либо подсказки, просто удалите его.
Я думаю, что нашел решение путем исследования и соединения остатков от слишком многих поисков Google.
Здесь это, комментарии и все:
private BufferedImage toCompatibleImage(BufferedImage image)
{
// obtain the current system graphical settings
GraphicsConfiguration gfxConfig = GraphicsEnvironment.
getLocalGraphicsEnvironment().getDefaultScreenDevice().
getDefaultConfiguration();
/*
* if image is already compatible and optimized for current system
* settings, simply return it
*/
if (image.getColorModel().equals(gfxConfig.getColorModel()))
return image;
// image is not optimized, so create a new image that is
BufferedImage newImage = gfxConfig.createCompatibleImage(
image.getWidth(), image.getHeight(), image.getTransparency());
// get the graphics context of the new image to draw the old image on
Graphics2D g2d = newImage.createGraphics();
// actually draw the image and dispose of context no longer needed
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
// return the new optimized image
return newImage;
}
В моем предыдущем сообщении, GraphicsConfiguration был тем, что содержало информацию, должен был создать оптимизированные изображения в системе. Это, кажется, работает вполне прилично, но я думал бы, что Java автоматически сделает это для Вас. Очевидно, Вы не можете стать слишком довольными Java.:) Я предполагаю, что закончил тем, что ответил на свой собственный вопрос. О, хорошо надо надеяться, это поможет некоторым из Вас, я видел попытку использовать Java для 2D игр.
Из того, что я помню, когда я думал о выполнении графики, программирующей в Java, созданные в библиотеках являются медленными. Мне рекомендовали о GameDev. Сеть, что любой делающий что-либо серьезное должен был бы использовать что-то как jogl