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

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

Ответить
Настройки темы
CMD/BAT - [решено] Создать скрипт, который выполняет следующее

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


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

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


Нужно создать скрипт, который выполняет следующее: на вход пакетному файлу приходит путь к каталогу, дата формата DD.MM.YYYY и второй каталог. Найти файлы в указанном каталоге, созданные раньше указанной даты, скопировать их в другой указанный каталог и добавить в имя файлов дату их создания.

Основной вопрос в том, как мне можно получить файлы, созданные раньше определённой даты? Например, когда я делаю
Скрытый текст
for /f %%S in ('dir /b') do (
set D=%%~tS
set D=%D:~0, 2%
if %D% LEQ %DT% (
copy %P1%%%~NXS %P2%
)
)

в переменную D у меня ничего не записывается, и строка выводит это как D=~0, 2
Помогите, пожалуйста, пробовал и delayed expansion, вроде как не помогает. Спасибо.

Отправлено: 20:35, 17-10-2018

 

Ветеран


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

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


Цитата flesh_royal1:
как мне можно получить файлы, созданные раньше определённой даты »
Код: Выделить весь код
forfiles
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:53, 17-10-2018 | #2



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

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


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


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

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


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

Отправлено: 22:37, 17-10-2018 | #3


Ветеран


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

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


Busla, forfiles работает не с датой/временем создания.

Цитата flesh_royal1:
Неужели не существует более краткого решения? »
Более краткое решение :lol:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

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

for %%i in ("sSourceFolder" "sDestFolder" "sDateCreatedBefore") do if not defined %%~i (
	call :Usage
	exit /b 1
)

if not exist "%sSourceFolder%\." (
	echo Can't find source folder [%sSourceFolder%].
	exit /b 2
)

if not exist "%sDestFolder%\." (
	echo Can't find destination folder [%sDestFolder%].
	exit /b 3
)

echo %sDateCreatedBefore%|>nul 2>&1 findstr.exe /r /b /e /c:"[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9][0-9]" || (
	echo Third parameter [%sDateCreatedBefore%] probably not a date in DD.MM.YYYY template.
	exit /b 4
)

set sSourceDrive=%sSourceFolder:~0,2%
set sSourcePath=%sSourceFolder:~2%\
set sDateCreatedBefore4Wbem=%sDateCreatedBefore:~6,4%%sDateCreatedBefore:~3,2%%sDateCreatedBefore:~0,2%

for /f "usebackq delims=" %%i in (
	`2^>nul wmic.exe DataFile where "Drive='%sSourceDrive%' AND Path = '%sSourcePath:\=\\%' AND CreationDate < '%sDateCreatedBefore4Wbem%'" get Name /value ^| 2^>nul find.exe /i "Name="`
) do for /f "tokens=2 delims==" %%j in ("%%~i") do (
	call :CopyFile "%%~j"
)

endlocal
exit /b 0

:Usage
	echo Usage: %~nx0 ^<Source folder^> ^<Destination folder^> ^<Date created before^>
	exit /b

:CopyFile
	setlocal enableextensions enabledelayedexpansion

	set sSourceFile=%~1

	for /f "usebackq delims=" %%i in (
		`2^>nul wmic.exe DataFile "%sSourceFile:\=\\%" get CreationDate /value ^| 2^>nul find.exe /i "CreationDate="`
	) do for /f "tokens=2 delims==+-." %%j in ("%%~i") do (
		set sCreationDate=%%~j
		set sNewFileName=%~n1_!sCreationDate:~0,8!%~x1
		
		echo Copy source file [%sSourceFile%] into destination folder [%sDestFolder%] as [!sNewFileName!]
		>nul copy /y "%sSourceFile%" "%sDestFolder%\!sNewFileName!"
	)

	endlocal
	exit /b 0

Цитата flesh_royal1:
Спасибо, решение было получено с использованием && »
К сожалению, это не то решение, что требовалось в задании.

P.S. Скажите Вашему преподавателю, что он извращенец альтернативно одарённый человек — давать такие лабораторки бедным студентам.

P.P.S. А если он примет решение с forfiles — то ещё и лопух .

P.P.P.S. WSH, PowerShell — наше всё в данном случае.

Последний раз редактировалось Iska, 18-10-2018 в 00:35.

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

Отправлено: 00:19, 18-10-2018 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Скрипт, который изменяет значение ячейки в Exсel romfus Скриптовые языки администрирования Windows 4 21-03-2018 16:23
CMD/BAT - [решено] Bat-ик который постоянно проверяет запущен ли процесс и выполняет действия Bastel Скриптовые языки администрирования Windows 1 16-01-2017 22:36
VBS/WSH/JS - [решено] Нужен управляющий скрипт который перезапускает программу. andrewua12 Скриптовые языки администрирования Windows 10 06-07-2009 19:25
[решено] Нужен управляющий скрипт который перезапускает программу. andrewua12 AutoIt 3 04-07-2009 16:09
Скрипт который может сам себя обновить BuilderMan Вебмастеру 8 30-09-2006 13:44




 
Переход