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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Обращение к самому новому/последнему файлу в папке

Ответить
Настройки темы
CMD/BAT - Обращение к самому новому/последнему файлу в папке

Аватара для Sisin

Старожил


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

Профиль | Отправить PM | Цитировать


В папке создаются файлы с названиями вида: log210, log211, log212 и т.д.

Как лучше указать в bat на самый новый/последний файл в папке???

Условно говоря: Program.exe /F "C:\11\log212" надо заменить C:\11\log212 на новый последний файл.

Отправлено: 10:56, 06-05-2019

 

Аватара для Sisin

Старожил


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

Профиль | Отправить PM | Цитировать


Вот пример.
Запускаю ниженаписанный батник для проверки и открывается окно paint, хотя должно появиться сообщение New file not created!

Код: Выделить весь код
@echo Off
cls
	set "Mask=log*."
	set "BoxIn=C:\11\"
        set "Prg1=start /wait " " "C:\Program Files\Windows NT\Accessories\wordpad.exe""
	
	set "Prg="C:\Windows\System32\mspaint.exe"
	
	set "OldFile="		
	for /F "usebackq delims=" %%f in (`2^>nul dir "%BoxIn%\%Mask%" /b /a:-d /o:-d /t:c`) do set "OldFile=%%f"
	%Prg1%
		
	for /F "usebackq delims=" %%f in (`2^>nul dir "%BoxIn%\%Mask%" /b /a:-d /o:-d /t:c`) do (
		if /I "%%f"=="%OldFile%" (Echo !!! Last file "%BoxIn%\%OldFile%".  New file not created! &Exit /B 1)
		start " " %Prg%
		exit /B
	)
	echo !!! Folder Or Files "%BoxIn%\%Mask%" not found
exit /B 2

Отправлено: 11:36, 15-05-2019 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


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

Профиль | Отправить PM | Цитировать


Sisin, Вы зачем-то руками переписали мой батник. Там, похоже, куча ошибок. Теперь это уже Ваш код. Я бы не хотел в нём ковыряться и выискивать в чём загвоздка. Так, на не очень внимательный взгляд,
set "BoxIn=C:\11\"
Set "BoxIn=C:\11"

set "Prg="C:\Windows\System32\mspaint.exe"
Set "Prg="C:\Windows\System32\mspaint.exe""

for /F "usebackq delims=" %%f in (`2^>nul dir "%BoxIn%\%Mask%" /b /a:-d /o:-d /t:c`) do set "OldFile=%%f"
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:D /T:C`) DO Set "OldFile=%%f"
Такой for ломает логику скрипта. Обратите внимание, в моём коде ключи у Dir в двух For разные.

Может, что-то еще извращено ....
Возьмите мой код 1:1, поставьте в описаниях свои пути, программы по образцу моих. Я Вас умоляю, не надо ничего извращать.

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


Последний раз редактировалось megaloman, 15-05-2019 в 12:21.

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

Отправлено: 12:13, 15-05-2019 | #22


Аватара для Sisin

Старожил


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

Профиль | Отправить PM | Цитировать


Каюсь, невнимательность...

Причина в этом (/O:D):

Цитата megaloman:
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:D /T:C`) DO Set "OldFile=%%f" »
Искренне благодарю за терпение!

Отправлено: 12:48, 15-05-2019 | #23


Новый участник


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

Профиль | Отправить PM | Цитировать


Если искомый файл по имени тоже в самом конце, то можно сделать проще:
Код: Выделить весь код
for %%i in (log*) do set LOG_FILE=%%~fi

Отправлено: 22:39, 22-05-2019 | #24


Ветеран


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

Профиль | Отправить PM | Цитировать


Knaps,
смотря какой принцип нумерации, даже последовательный по нарастанию, вот ваша строка в коде ниже, запустите код и убедитесь что будет выведен файл не с номером 31, как вы вероятно предполагаете:
Код: Выделить весь код
@echo off
if not exist TEMP md TEMP
pushd "%~dp0TEMP"
 for /l %%n in (1 1 31) do rem:>log%%n.txt
 for %%i in (log*) do set LOG_FILE=%%~fi
 echo %LOG_FILE%
popd
pause

Отправлено: 15:41, 23-05-2019 | #25


Новый участник


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

Профиль | Отправить PM | Цитировать


Спасибо за замечание, но при такой нумерации файл по имени не будет в самом конце, так что все в силе.

Отправлено: 19:54, 25-05-2019 | #26


Ветеран


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

Профиль | Отправить PM | Цитировать


Цитата Knaps:
файл по имени не будет в самом конце »
именно!
Цитата Knaps:
при такой нумерации »
что я привел? Или при нумерации ТС
Цитата Sisin:
log210, log211, log212 »
в чем отличие? Вы судите лишь по трем файлам? И о чем это говорит? Почему она (нумерация) не может быть в точности как я привел?
приведенная вами строка, еще раз повторяю, не даст правильного результата, мы не получим файл с максимальным номером вашей строкой при такой нумерации как я привел. Если бы нумерация была: log001, log002, ..., log210, log211, log212, то да, но это неизвестно пока ТС не просветит этот вопрос.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:01, 26-05-2019 | #27


Новый участник


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

Профиль | Отправить PM | Цитировать


Цитата alpap:
что я привел? Или при нумерации ТС »
При той, что привели вы.

Цитата alpap:
Почему она (нумерация) не может быть в точности как я привел? »
А кто говорит, что не может быть?

Рекомендую еще раз перечитать:
Цитата Knaps:
Если искомый файл по имени тоже в самом конце, то можно сделать проще: »
Очевидно, что если файл по имени не в самом конце, то нужен другой способ.

Отправлено: 20:19, 26-05-2019 | #28


Ветеран


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

Профиль | Отправить PM | Цитировать


Цитата Knaps:
Очевидно, что если файл по имени не в самом конце, то нужен другой способ »
давайте сначала ампутируем, а там посмотрим, может и не зря. Может не рисковать где не надо и сразу применять решение исключающее может, возможно да кабы.

Отправлено: 16:32, 27-05-2019 | #29


Аватара для Sisin

Старожил


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

Профиль | Отправить PM | Цитировать


Цитата alpap:
log001, log002, ..., log210, log211, log212, то да, но это неизвестно пока ТС не просветит этот вопрос. »
Господа, изначально было log001.

Отправлено: 10:17, 28-05-2019 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Обращение к самому новому/последнему файлу в папке

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Как получить доступ к файлу или папке Vadikan Microsoft Windows 2000/XP 493 16-12-2017 11:16
Доступ - [решено] Права доступа к файлу в папке Windows\System32 jokeroto Microsoft Windows 7 28 27-11-2014 21:08
CMD/BAT - [решено] Задать атрибуты файлу/папке через скрипт Habetdin Скриптовые языки администрирования Windows 15 21-11-2013 17:53
VBS/WSH/JS - [решено] Присвоить атрибуты файлу/папке через скрипт boss911 Скриптовые языки администрирования Windows 4 10-11-2009 06:19
[решено] Обращение к папке ManHack Хочу все знать 3 05-06-2008 14:24




 
Переход