CMD/BAT - Поиск самого свежего файла

Ответить
 • Просмотры: 2
Аватара пользователя
Flyer61rus

Re: CMD/BAT - Поиск самого свежего файла

Сообщение Flyer61rus »

Ребята!

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



Код:

Код: Выделить всё

@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 ^
    exit /b 1
)
endlocal
exit /b

Поясню, требуется:

1) найти самый свежий файл с расширением txt в директории

2) скопировать найденный файл в другую директорию с переименованием в alfa.txt

3) если в директории назначения уже существует файл alfa.txt заменить его без подтверждения.



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

Re: CMD/BAT - Поиск самого свежего файла

Сообщение Iska »

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

Код: Выделить всё

[/url], а не [url=http://forum.oszone.net/misc.php?do=bbcode#spoiler][spoiler][/url].




				Цитата [b]jenia_ov[/b]:
	
	
		
				1) найти самый свежий файл с расширением txt в директории [url=viewtopic.php?p=71271#p71271]»[/url]
		
	
	
«Свежий» — по дате создания или по дате модификации?




				Цитата [b]jenia_ov[/b]:
	
	
		
				2) скопировать найденный файл в другую директорию с переименованием в alfa.txt [url=viewtopic.php?p=71271#p71271]»[/url]
		
	
	
Каким образом будет задаваться «другая директория»? Параметром или тупо в коде?




				Цитата [b]jenia_ov[/b]:
	
	
		
				как в этом коде использовать [url=viewtopic.php?p=71271#p71271]»[/url]
		
	
	
Никак. Вам нужен другой код.



Вот пример для а) по дате создания и б) папки задаются параметрами:

            
            
                Скрытый текст
                
                [spoiler]Код: [url=#][/url][/spoiler]
 [code]@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 ^ ^ 
		exit /b 1
	)
) else (
	echo Usage: %~nx0 ^ ^ 
	exit /b 1
)
endlocal
exit /b 0
Аватара пользователя
Flyer61rus

Re: CMD/BAT - Поиск самого свежего файла

Сообщение Flyer61rus »

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

Ваш код полностью удовлетворяет потребности! Низкий Вам поклон!
Аватара пользователя
Iska

Re: CMD/BAT - Поиск самого свежего файла

Сообщение Iska »

jenia_ov, хорошо. Тогда вместо использования аргументов просто укажите Ваши конкретные пути вместо выделенного:



Код:

Код: Выделить всё

set sSourceFolder=%~1
set sDestFolder=%~2
Аватара пользователя
jenia_ov

Re: CMD/BAT - Поиск самого свежего файла

Сообщение jenia_ov »

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

Ваш код полностью удовлетворяет потребности! Низкий Вам поклон!
Аватара пользователя
jenia_ov

Re: CMD/BAT - Поиск самого свежего файла

Сообщение jenia_ov »

jenia_ov, хорошо. Тогда вместо использования аргументов просто укажите Ваши конкретные пути вместо выделенного:



Код:

Код: Выделить всё

set sSourceFolder=%~1
set sDestFolder=%~2
Аватара пользователя
jenia_ov

Re: CMD/BAT - Поиск самого свежего файла

Сообщение jenia_ov »

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



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

Re: CMD/BAT - Поиск самого свежего файла

Сообщение jenia_ov »

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"`
Аватара пользователя
jenia_ov

Re: CMD/BAT - Поиск самого свежего файла

Сообщение jenia_ov »

Iska, Огромное спасибо, все отлично!
Аватара пользователя
jenia_ov

Re: CMD/BAT - Поиск самого свежего файла

Сообщение jenia_ov »

Цитата Iska:



попробуйте добавить
CMD/BAT - Поиск самого свежего файла




Помогите, пожалуйста, переписать батник таким образом, чтобы он находил последний созданный файл во вложенных папках. Я нашёл решение чтобы копировались все файлы из вложенных папок:



Код:

Код: Выделить всё

for /f "tokens=*" %%i in (' dir /b /s /ad "C:\SourceMainDir\" ') do xcopy /e "%%i" "C:\DestinationDir\"

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

Вернуться в «Скриптовые языки администрирования Windows»