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

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

Ответить
Настройки темы
CMD/BAT - Поиск самого свежего файла

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


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

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


Ребят, помогите написать bat файл, который бы искал самый свежие файл каждого расширения в указанной директории. То есть в папке Files находится много файлов разных расширений, например .doc, .excel, .txt и т.д. и таких файлов несколько. Так вот нужно найти самый свежий файл из .doc, .excel и так по всем расширениям. Вот бат файл, который ищет просто самый свежий файл, но как сделать, чтобы искал по каждому расширению не знаю. Если кто нибудь сделает, буду очень благодарен.

@echo off
for /f "delims=" %%i in ('dir C:\Files\ /B /A-D /OD /TA') do (set file=%%i)
echo %file%
pause

Отправлено: 23:21, 25-05-2016

 

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


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

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


Ребята!
Подскажите пожалуйста, как в этом коде использовать найденный файл для копирования в другую директорию.
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%~1

if defined sSourceFolder (
    for %%i in ("%sSourceFolder%\*.txt") do set sFoundExt%%~xi=%%~xi
    for /f "usebackq tokens=2 delims==" %%i in (`set sFoundExt`) do for /f "usebackq delims=" %%j in (`2^>nul dir /b /a:-d /o:d /t:c "%sSourceFolder%\*%%~i"`) do set sFoundLastFileExt%%~i=%%j
    for /f "usebackq tokens=2 delims==" %%i in (`set sFoundLastFileExt`) do echo %%~i
    for /f "usebackq tokens=3 delims==" %%i in (`set sFoundLastFileExt`) do copy %%~i d:\alfa.txt
) else (
    echo Usage: %~nx0 ^<Source folder^>
    exit /b 1
)
endlocal

exit /b
Поясню, требуется:
1) найти самый свежий файл с расширением txt в директории
2) скопировать найденный файл в другую директорию с переименованием в alfa.txt
3) если в директории назначения уже существует файл alfa.txt заменить его без подтверждения.

куда подставить txt для 1 пункта я понял, на 2 пункте сдулся, с 3 могу разобраться после того как узнаю имя/переменную в пункте 2.

Последний раз редактировалось jenia_ov, 23-12-2016 в 09:13. Причина: пояснение


Отправлено: 07:36, 23-12-2016 | #11



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

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


Ветеран


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

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


jenia_ov, не тот тэг используете. Надо [code], а не [spoiler].

Цитата jenia_ov:
1) найти самый свежий файл с расширением txt в директории »
«Свежий» — по дате создания или по дате модификации?

Цитата jenia_ov:
2) скопировать найденный файл в другую директорию с переименованием в alfa.txt »
Каким образом будет задаваться «другая директория»? Параметром или тупо в коде?

Цитата jenia_ov:
как в этом коде использовать »
Никак. Вам нужен другой код.

Вот пример для а) по дате создания и б) папки задаются параметрами:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%~1
set sDestFolder=%~2

set sNewFileName=alfa.txt

if defined sSourceFolder (
	if defined sDestFolder (
		if exist "%sSourceFolder%\." (
			if exist "%sDestFolder%\." (
				for /f "usebackq delims=" %%i in (
					`2^>nul dir /b /a:-d /o:d /t:c "%sSourceFolder%\*.txt"`
				) do if not defined sFoundFile set sFoundFile=%%i
				
				if defined sFoundFile (
					>nul copy /y "%sSourceFolder%\!sFoundFile!" "%sDestFolder%\%sNewFileName%"
				) else (
					echo No txt files found.
					exit /b 4
				)
			) else (
				echo Can't find destination folder [%sDestFolder%].
				exit /b 3
			)
		) else (
			echo Can't find source folder [%sSourceFolder%].
			exit /b 2
		)
	) else (
		echo Usage: %~nx0 ^<Source folder^> ^<Destination folder^> 
		exit /b 1
	)
) else (
	echo Usage: %~nx0 ^<Source folder^> ^<Destination folder^> 
	exit /b 1
)

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

Отправлено: 08:40, 23-12-2016 | #12


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


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

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


Iska, файл по дате создания, директории постоянные и неизменные, поэтому могу задаваться и в коде.
Ваш код полностью удовлетворяет потребности! Низкий Вам поклон!

Отправлено: 08:47, 23-12-2016 | #13


Ветеран


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

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


jenia_ov, хорошо. Тогда вместо использования аргументов просто укажите Ваши конкретные пути вместо выделенного:
Код: Выделить весь код
set sSourceFolder=%~1
set sDestFolder=%~2

Отправлено: 08:52, 23-12-2016 | #14


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


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

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


Iska, прошу прощения, сразу не обратил внимание, копируется самый старый файл почему-то.

Да, так и сделал, сначала кинулся ярлык сделал и пути прописал, потом только в код вписал каталоги.

Отправлено: 08:53, 23-12-2016 | #15


Ветеран


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

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


jenia_ov, попробуйте добавить «-» в «/o:d» в строку:
Код: Выделить весь код
					`2^>nul dir /b /a:-d /o:d /t:c "%sSourceFolder%\*.txt"`
чтобы стало «/o:-d»:
Код: Выделить весь код
					`2^>nul dir /b /a:-d /o:-d /t:c "%sSourceFolder%\*.txt"`
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:56, 23-12-2016 | #16


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


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

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


Iska, Огромное спасибо, все отлично!

Отправлено: 09:01, 23-12-2016 | #17


Ветеран


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

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


jenia_ov, ну, Вы таки попроверяйте всё ж. Может, окажется, что нужна была не дата создания…

Отправлено: 09:14, 23-12-2016 | #18


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


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

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


Iska,
Суть процесса - с сайта клиент банка сохраняется выписка по счету в txt файле, поскольку работа идет из браузера chrome - он сохраняет эту выписку в папку Загрузки, как и все что скачивается через него. С помощью этого батника, самый свежий по дате создания txt файл копируется в расшаренную папку на сервере с 1С откуда и осуществляется загрузка этого файла. Выписка из банка всегда с разным именем файла (подставляется дата выписки). А поскольку txt файлы на том компе больше никто не качает, то это решение более чем подходит.

Отправлено: 09:32, 23-12-2016 | #19


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


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

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


Цитата Iska:
попробуйте добавить »
Помогите, пожалуйста, переписать батник таким образом, чтобы он находил последний созданный файл во вложенных папках. Я нашёл решение чтобы копировались все файлы из вложенных папок:
Код: Выделить весь код
for /f "tokens=*" %%i in (' dir /b /s /ad "C:\SourceMainDir\" ') do xcopy /e "%%i" "C:\DestinationDir\"
но никак не получается соединить с кодом из этой темы так, чтобы из вложенных папок выбирался только самый последний созданный файл.

Отправлено: 17:03, 16-08-2018 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Не работает скрипт копирования самого свежего файла по текущей дате dark-------13 Скриптовые языки администрирования Windows 6 18-02-2016 08:42
CMD/BAT - Копирование самого последнего измененного файла Ua-life Скриптовые языки администрирования Windows 2 23-04-2015 18:37
CMD/BAT - [решено] Поиск и копирование самого нового файла V!RTuE Скриптовые языки администрирования Windows 1 05-02-2015 16:25
CMD/BAT - Построчная перезапись файла и отправка его на адрес почты взятый внутри самого файла JackL Скриптовые языки администрирования Windows 6 26-05-2013 12:51
CMD/BAT - [решено] Переименование файла по данным из самого файла dark-------13 Скриптовые языки администрирования Windows 11 21-04-2011 18:08




 
Переход