Обращение к самому новому/последнему файлу в папке
В папке создаются файлы с названиями вида: log210, log211, log212 и т.д.
Как лучше указать в bat на самый новый/последний файл в папке??? Условно говоря: Program.exe /F "C:\11\log212" надо заменить C:\11\log212 на новый последний файл. |
Sisin, «новый/последний» — по дате создания или по дате последней модификации?
|
Цитата:
Можно по числу в названии после log. Оно только увеличивается. |
Файлы действительно не имеют расширения и всегда имеют log в начале имени?
Код:
@echo off |
То же, но без If
Код:
@Echo Off |
megaloman, а как в Вашем варианте дописать ключи такого вида:
Program.exe /F "C:\11\log212" /D "C:\11" /DW В варианте от ISKA я разобрался, а тут не срабатывает. |
Цитата:
Код:
Set "Prg=Program.exe" |
Iska, я также и сделал, но не сработало почему-то.
|
Sisin, теоретически возможно (не проверялось), что параметр «/D "…"» поглощает команда start.
|
Цитата:
|
Sisin, Попробуйте вариант
Код:
@Echo On Запустите его так: bat.bat >C:\kuku.txt 2>&1 Приложите файл C:\kuku.txt к сообщению для анализа @Echo On в боевом варианте надо заменить на @Echo Off, хотя это не сильно принципиально. Цитата:
Файлы в студию. |
Цитата:
|
Перед предложенными вариантами в батнике выполняется некая Startprogram.exe, которая создает log210, log211, log212 и т.д.
Как сделать, чтобы в начале предложенных вариантов проверялось создала ли Startprogram.exe новый файл или нет? т.е., например, запускается батник, запоминается, что последний файл в папке "C:\11\" log212, далее start /wait "" "Startprogram.exe", далее проверяется появился новый файл log213, если нет - то выход, если да - то запускаются вышепредложенные варианты: Вариант 1
Код:
@echo off Вариант 2
Код:
@Echo On |
Цитата:
Код:
@Echo Off |
А вот это "C:\11\log213."" зачем??
log213 меняется после каждого запуска Startprogram.exe. Например, сейчас последний файл log586. Может я не понял как надо изменить Код:
Set "Prg1="C:\Windows\System32\notepad.exe" "C:\11\log213."" |
Sisin, я не знаю, как работает Ваша программа Startprogram.exe, с какими ключами,откуда берётся нумерация. Я просто подменил её для примера и отладки, чтобы был понятен формат ее описания.
Цитата:
Код:
Set "Prg1="Startprogram.exe" "%BoxIn%" /kuku" |
Цитата:
Я в Gui выбираю то, что мне надо и выхожу. Появляется log с числом большим на 1. |
Имхо, будет вполне достаточно
Код:
Set "Prg1="Startprogram.exe"" Код:
Set "Prg1=start /wait " " "Startprogram.exe"" |
Запускаю батник, открывается GUI Startprogram.exe, ничего там не делаю и закрываю, новый log соответственно не создается, но Program.exe все равно обрабатывает уже обработанный log, хотя должно появиться сообщение New file not created!.
|
Sisin, Этого не может быть, в чём-то Вы искажаете код.
Вот отладочный вариант батника. Допустим, он называется bat.bat
Запустите его в виде bat.bat >C:\txt.txt 2>&1 Получившийся файл C:\txt.txt прикрепите к сообщению. Код:
@Echo On |
Вот пример.
Запускаю ниженаписанный батник для проверки и открывается окно paint, хотя должно появиться сообщение New file not created! Код:
@echo Off |
Sisin, Вы зачем-то руками переписали мой батник. Там, похоже, куча ошибок. Теперь это уже Ваш код. Я бы не хотел в нём ковыряться и выискивать в чём загвоздка. Так, на не очень внимательный взгляд,
Set "BoxIn=C:\11" 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 ломает логику скрипта. Обратите внимание, в моём коде ключи у Dir в двух For разные. Может, что-то еще извращено .... Возьмите мой код 1:1, поставьте в описаниях свои пути, программы по образцу моих. Я Вас умоляю, не надо ничего извращать. |
Каюсь, невнимательность...
Причина в этом (/O:D): Цитата:
|
Если искомый файл по имени тоже в самом конце, то можно сделать проще:
Код:
for %%i in (log*) do set LOG_FILE=%%~fi |
Knaps,
смотря какой принцип нумерации, даже последовательный по нарастанию, вот ваша строка в коде ниже, запустите код и убедитесь что будет выведен файл не с номером 31, как вы вероятно предполагаете: Код:
@echo off |
Спасибо за замечание, но при такой нумерации файл по имени не будет в самом конце, так что все в силе.
|
Цитата:
Цитата:
Цитата:
приведенная вами строка, еще раз повторяю, не даст правильного результата, мы не получим файл с максимальным номером вашей строкой при такой нумерации как я привел. Если бы нумерация была: log001, log002, ..., log210, log211, log212, то да, но это неизвестно пока ТС не просветит этот вопрос. |
Цитата:
Цитата:
Рекомендую еще раз перечитать: Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
alpap, я просто не считаю людей вокруг идиотами и считаю, что человеку достаточно предложить решение и, возможно, обратить внимание, что оно применимо не всегда, а дальше он сам примет решение. Но вот точно не стоит лезть и доказывать, что чье-то решение плохое, если оно не охватывает 100% случаев. Просто надо быть добрее и доброжелательнее.
|
Цитата:
Цитата:
|
Знаю, вот только она не применима в данном случае. Повторюсь, не надо считать всех вокруг глупее себя, превращая форум в сборище скрипткидди.
|
Код:
@echo Off Код:
ping -n 1 localhost>Nul |
Sisin, когда Вы делаете start /wait programm — дальше ничего не происходит, пока не будет завершено исполнение programm.
|
Цитата:
|
start /wait " " CMD /c "1.bat" |
|
Время: 21:07. |
Время: 21:07.
© OSzone.net 2001-