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

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

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

Аватара для Sisin

Старожил


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

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


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

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

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

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

 

Ветеран


Contributor


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

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


Sisin, Попробуйте вариант
Код: Выделить весь код
@Echo On
cls
	Set "Mask=log*."
	Set "BoxIn=C:\11"

	Set "Prg="Program.exe" /F "%BoxIn%\%%f" /D "%BoxIn%" /DW"
	
	FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:-D /T:C`) DO (
		Start " " %Prg%
		Exit /B
	)
	Echo !!! Folder Or Files "%BoxIn%\%Mask%" not found
Exit /B 1
Допустим, Ваш батник называется bat.bat
Запустите его так: bat.bat >C:\kuku.txt 2>&1
Приложите файл C:\kuku.txt к сообщению для анализа
@Echo On в боевом варианте надо заменить на @Echo Off, хотя это не сильно принципиально.
Цитата Iska:
теоретически возможно (не проверялось), что параметр «/D "…"» поглощает команда start. »
Можно попробовать убрать Start " " и, опять же, запустить батник bat.bat >C:\kuku222.txt 2>&1
Файлы в студию.

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

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

Отправлено: 16:30, 06-05-2019 | #11



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

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


Аватара для Sisin

Старожил


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

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


Цитата megaloman:
Sisin, Попробуйте вариант »
Работает в таком виде, ничего не менял, благодарю.

Отправлено: 16:41, 06-05-2019 | #12


Аватара для Sisin

Старожил


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

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


Перед предложенными вариантами в батнике выполняется некая Startprogram.exe, которая создает log210, log211, log212 и т.д.
Как сделать, чтобы в начале предложенных вариантов проверялось создала ли Startprogram.exe новый файл или нет?
т.е., например, запускается батник, запоминается, что последний файл в папке "C:\11\" log212, далее start /wait "" "Startprogram.exe", далее проверяется появился новый файл log213, если нет - то выход, если да - то запускаются вышепредложенные варианты:

Вариант 1
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\11
set sMask=log*.

if exist "%sSourceFolder%\." (
	for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d /o:d /t:c "%sSourceFolder%\%sMask%"`) do (
		set sLastFile=%%~i
	)
	
	if defined sLastFile (
		"Program.exe" /F "%sSourceFolder%\!sLastFile!"
	) else (
		echo Nothing found.
		exit /b 2
	)
) else (
	echo Can't find source folder [%sSourceFolder%].
	exit /b 1
)

endlocal
exit /b 0


Вариант 2
Код: Выделить весь код
@Echo On
cls
	Set "Mask=log*."
	Set "BoxIn=C:\11"

	Set "Prg="Program.exe" /F "%BoxIn%\%%f" /D "%BoxIn%" /DW"
	
	FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:-D /T:C`) DO (
		Start " " %Prg%
		Exit /B
	)
	Echo !!! Folder Or Files "%BoxIn%\%Mask%" not found
Exit /B 1

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


Ветеран


Contributor


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

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


Цитата Sisin:
Как сделать, чтобы в начале предложенных вариантов проверялось создала ли Startprogram.exe новый файл или нет »
Код: Выделить весь код
@Echo Off
cls
	Set "Mask=log*."
	Set "BoxIn=C:\11"
	Set "Prg1="C:\Windows\System32\notepad.exe" "C:\11\log213.""
	
	Set "Prg="Program.exe" /F "%BoxIn%\%%f" /D "%BoxIn%" /DW"
	
	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
Красную строку замените четко по образцу, сохраняя кавычки, на свою Startprogram.exe

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


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

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

Отправлено: 15:00, 14-05-2019 | #14


Аватара для Sisin

Старожил


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

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


А вот это "C:\11\log213."" зачем??
log213 меняется после каждого запуска Startprogram.exe.
Например, сейчас последний файл log586.

Может я не понял как надо изменить
Код: Выделить весь код
Set "Prg1="C:\Windows\System32\notepad.exe" "C:\11\log213.""

Отправлено: 16:16, 14-05-2019 | #15


Ветеран


Contributor


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

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


Sisin, я не знаю, как работает Ваша программа Startprogram.exe, с какими ключами,откуда берётся нумерация. Я просто подменил её для примера и отладки, чтобы был понятен формат ее описания.
Цитата megaloman:
Красную строку замените четко по образцу, сохраняя кавычки, на свою Startprogram.exe
Вам необходимо эту строку заменить на описание вызова Вашей программы, например (это мои абстрактные измышления, я не телепат):
Код: Выделить весь код
Set "Prg1="Startprogram.exe" "%BoxIn%" /kuku"
Повторюсь, я не знаю, как вызывается Ваша программа, правильно её прописать - Ваша задача. Альтернатива: приведите пример её вызова, чтобы я мог вставить её в свой код.

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


Последний раз редактировалось megaloman, 14-05-2019 в 16:45.


Отправлено: 16:31, 14-05-2019 | #16


Аватара для Sisin

Старожил


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

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


Цитата megaloman:
Повторюсь, я не знаю, как вызывается Ваша программа, правильно её прописать - Ваша задача. Альтернатива: приведите пример её вызова, чтобы я мог вставить её в свой код. »
Так она и не консольная, поэтому написано start /wait "" "Startprogram.exe". Ключей нет.
Я в Gui выбираю то, что мне надо и выхожу. Появляется log с числом большим на 1.

Отправлено: 16:48, 14-05-2019 | #17


Ветеран


Contributor


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

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


Имхо, будет вполне достаточно
Код: Выделить весь код
Set "Prg1="Startprogram.exe""
хотя можно и так:
Код: Выделить весь код
Set "Prg1=start /wait " " "Startprogram.exe""

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


Отправлено: 17:12, 14-05-2019 | #18


Аватара для Sisin

Старожил


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

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


Запускаю батник, открывается GUI Startprogram.exe, ничего там не делаю и закрываю, новый log соответственно не создается, но Program.exe все равно обрабатывает уже обработанный log, хотя должно появиться сообщение New file not created!.

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


Ветеран


Contributor


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

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


Sisin, Этого не может быть, в чём-то Вы искажаете код.
Вот отладочный вариант батника. Допустим, он называется bat.bat
Запустите его в виде
bat.bat >C:\txt.txt 2>&1
Получившийся файл C:\txt.txt прикрепите к сообщению.
Код: Выделить весь код
@Echo On
cls
	Set "Mask=log*."
	Set "BoxIn=C:\11"
	Set "Prg1="Startprogram.exe""
	
	Set "Prg="Program.exe" /F "%BoxIn%\%%f" /D "%BoxIn%" /DW"
	
	Set "OldFile="		
	FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:D /T:C`) DO Set "OldFile=%%f"
Echo ========OldFile "%OldFile%"
Dir "%BoxIn%\%OldFile%"
 
	%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)
Echo ========NewFile "%%f"  ========OldFile "%OldFile%"
Dir "%BoxIn%\%%f"
Echo ========Start " " %Prg%
		Start " " %Prg%
		Exit /B
	)
	Echo !!! Folder Or Files "%BoxIn%\%Mask%" not found
Exit /B 2

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


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



Компьютерный форум 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




 
Переход