Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] Скрипт для копирования/перемещения выделенных файлов в заранее указанные каталоги

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


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

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


Доброго времени суток!
Друзья, помогите написать скрипт для копирования/перемещения выделенных файлов в указанные заранее каталоги. (больше интересует копирование, а перемещение, укажите, пожалуйста, дополнительно в комментарии)
Конкретно хотел создать кнопочку в Тоталкомандере на вертикальной панели чтобы выделить файлы и нажав на нее файлы копировались/перемещались в указанные в скрипте каталоги

Например
есть два каталога
D:\Телеграммы\2018\02\04\
D:\Почта\отправка\
скрипт должен копировать/перемещать в них выделенные файлы

!важное условие: путь к первому каталогу 2018\02\04 должен быть сформирован через переменные %yyyy%\%mm%\%dd%
для формирования текущей даты использую код от ©megaloman
Скрытый текст
Код: Выделить весь код
@Echo Off
cls

SetLocal EnableDelayedExpansion

Call :StrDate "yyyy" "mm" "dd" "hhmm"

Set /A DeltaDay=0
Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyN" "mmN" "ddN"

Set /A DeltaDay=-1
Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyY" "mmY" "ddY"

Set /A DeltaDay=1
Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyT" "mmT" "ddT"

Echo %yyyyN% %mmN% %ddN% Сегодня
Echo %yyyyY% %mmY% %ddY% Вчера
Echo %yyyyT% %mmT% %ddT% Завтра

pause
GoTo :Eof


:StrDate
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
	Set "%~1=%@Tdate:~0,4%"
	Set "%~2=%@Tdate:~4,2%"
	Set "%~3=%@Tdate:~6,2%"
	Set "%~4=%@Tdate:~8,4%"
GoTo :Eof

:FromNow

rem Пересчет даты на заданное кол-во дней
rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd

rem Заимствовано http://forum.oszone.net/thread-186889.html
rem вызов Call :FromNow %DeltaDay% %Date% "yyyy" "mm" "dd"
rem результат в перемменной %yyyy% %mm% %dd%

 SetLocal
 Set DT=%2
 Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100
 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
 Set /A J=J+2-12*L,I=100*(N-49)+I+L
 Set /A yyyy=I,mm=100+J,dd=100+K
 EndLocal &(Set %~3=%yyyy%&Set %~4=%mm:~-2%&Set %~5=%dd:~-2%)
GoTo :Eof

Отправлено: 13:04, 04-02-2018

 

Аватара для semka189

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


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

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


Подпишусь автору.
У меня почти такая же история.
Нужно батник которые скопирует определенные файлы с флешки на диск Д и в папку.
Основные параметры кто сможет написать буду очень благодарен,а название файлов и куда копировать сам впишу.

Отправлено: 07:28, 09-02-2018 | #2



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

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


Ветеран


Contributor


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

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


Sergey.l, в Тоталкомандере я не ориентируюсь.
Создайте на этот батник значок на рабочем столе. В проводнике выделите файлы и затащите их на этот значок
Код: Выделить весь код
@echo off
cls

Set "BoxArc=Z:\Телеграммы"
Set "BoxOut=Z:\Почта\отправка"

FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
Set "YYYY=%TDate:~0,4%"
Set "MM=%TDate:~4,2%"
Set "DD=%TDate:~6,2%"

If "%~1"=="" (
	Echo !!! Не указаны файлы для обработки &Echo:
	Pause
	Exit /B 240	
)
Set "BoxData=%BoxArc%\%YYYY%\%MM%\%DD%"
Md "%BoxData%" 2>nul
Md "%BoxOut%" 2>nul
 
:Begin
	If "%~1"=="" Pause &GoTo :Eof
	Echo "%~1" &(Copy "%~1" "%BoxOut%\"  >nul &&Move /Y "%~1" "%BoxData%\" >nul)

	Shift
GoTo :Begin
Напоминаю: батник должен быть сохранён в 866 (DOS) кодировке, иначе с русскими символами будут проблемы
Пропишите свои пути.

Если надо именно vbs - js -пишите

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


Последний раз редактировалось megaloman, 09-02-2018 в 15:18.

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

Отправлено: 14:56, 09-02-2018 | #3


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


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

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


Цитата megaloman:
Код: Выделить весь код
Set "BoxData=%BoxArc%\%YYYY%\%MM%\%DD%"
Md "%BoxData%" 2>nul
Md "%BoxOut%" 2>nul
»
Спасибо большое. Условие уточню. Я имел ввиду не создавать пути через команду MD c датой, а просто указать их в батнике. для этого нужна маска %yyyy% %mm% %dd% и , пожалуйста, напишите батник на основе вашего кода по формированию даты вчера-сегодня-завтра
Скрытый текст
Код: Выделить весь код
@Echo Off
cls

SetLocal EnableDelayedExpansion

Call :StrDate "yyyy" "mm" "dd" "hhmm"

Set /A DeltaDay=0
Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyN" "mmN" "ddN"

Set /A DeltaDay=-1
Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyY" "mmY" "ddY"

Set /A DeltaDay=1
Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyT" "mmT" "ddT"

Echo %yyyyN% %mmN% %ddN% Сегодня
Echo %yyyyY% %mmY% %ddY% Вчера
Echo %yyyyT% %mmT% %ddT% Завтра

pause
GoTo :Eof


:StrDate
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
	Set "%~1=%@Tdate:~0,4%"
	Set "%~2=%@Tdate:~4,2%"
	Set "%~3=%@Tdate:~6,2%"
	Set "%~4=%@Tdate:~8,4%"
GoTo :Eof

:FromNow

rem Пересчет даты на заданное кол-во дней
rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd

rem Заимствовано http://forum.oszone.net/thread-186889.html
rem вызов Call :FromNow %DeltaDay% %Date% "yyyy" "mm" "dd"
rem результат в перемменной %yyyy% %mm% %dd%

 SetLocal
 Set DT=%2
 Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100
 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
 Set /A J=J+2-12*L,I=100*(N-49)+I+L
 Set /A yyyy=I,mm=100+J,dd=100+K
 EndLocal &(Set %~3=%yyyy%&Set %~4=%mm:~-2%&Set %~5=%dd:~-2%)
GoTo :Eof

т.к. мне нужна будет дата сегодня-вчера, работаю сутки

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

Последний раз редактировалось Sergey.l, 10-02-2018 в 21:17.


Отправлено: 21:05, 10-02-2018 | #4


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


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

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


megaloman, мне не требуется копировать по дате создания файла. Мне надо перемещать в папку путь к которой выглядит как yyyy\mm\dd. Почему надо сегодня вчера завтра, т.к. путь к папке например 2018\02\11 сегодня, после полуночи это уже вчера, а я работаю сутки. И в конце смены я передаю кое какие док-ты след смене и копирую неск файлов в папку завтра, т.е. 2018\02\12
Понятно, что в одном батнике не сделать чтобы он понимал когда вчера когда завтра, я сделаю три. И в зависимости от времени буду использовать

P.S. есть возможность сделать чтобы выдавался запрос при совпадении файла в перемещаемой директории

Последний раз редактировалось Sergey.l, 11-02-2018 в 08:35.


Отправлено: 08:28, 11-02-2018 | #5


Ветеран


Contributor


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

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


Sergey.l,
Вот батник. Скопируйте его 3 раза под именами, например, сегодня.bat вчера.bat завтра.bat. Пропишите в зависимости от названия параметр DeltaDay
Код: Выделить весь код
@echo off
cls

Set "BoxArc=Z:\Телеграммы"
Set "BoxOut=Z:\Почта\отправка"

rem Set /A DeltaDay   =0 -сегодня;  =1 -завтра; =-1 -вчера 
Set /A DeltaDay=-1

If "%~1"=="" (
	Echo !!! Не указаны файлы для обработки &Echo:
	Pause
	Exit /B 240	
)
SetLocal EnableDelayedExpansion
Call :StrDate "yyyy" "mm" "dd"

If Not %DeltaDay%==0 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyy" "mm" "dd"

Set "BoxData=%BoxArc%\%yyyy%\%mm%\%dd%"
Md "%BoxData%" 2>nul
Md "%BoxOut%" 2>nul
 
:Begin
	If "%~1"=="" Pause &GoTo :Eof

	Set SCopy=Copy /-Y "%~1" "%BoxOut%\"
	Set SMove=Move /-Y "%~1" "%BoxData%\"
	Echo %SCopy% &%SCopy% &&(Echo %SMove% &%SMove%)

	Shift
GoTo :Begin

:StrDate
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
	Set "%~1=%@Tdate:~0,4%"
	Set "%~2=%@Tdate:~4,2%"
	Set "%~3=%@Tdate:~6,2%"
GoTo :Eof

:FromNow
	rem Пересчет даты на заданное кол-во дней
	rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd

	rem Заимствовано http://forum.oszone.net/thread-186889.html
	rem вызов Call :FromNow %DeltaDay% %Date% "yyyy" "mm" "dd"
	rem результат в перемменной %yyyy% %mm% %dd%

	SetLocal
	Set DT=%2
	Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100
	Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
	Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
	Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
	Set /A J=J+2-12*L,I=100*(N-49)+I+L
	Set /A yyyy=I,mm=100+J,dd=100+K
	EndLocal &(Set %~3=%yyyy%&Set %~4=%mm:~-2%&Set %~5=%dd:~-2%)
GoTo :Eof
Создание папок (Md) вполне можете оставить и не создавать папки руками. Если папки уже имеются, вреда не будет.

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

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

Отправлено: 13:17, 11-02-2018 | #6


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


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

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


megaloman, спасибо большое!
Почему то переносит по одному файлу, когда выделяю два и более файла!?

Подредактировал так
Скрытый текст
Код: Выделить весь код
@echo off 
cls 

rem Set /A DeltaDay * =0 -сегодня; *=1 -завтра; =-1 -вчера 
Set /A DeltaDay=0 

If "%~1"=="" ( 
Echo !!! Не указаны файлы для обработки &Echo: 
Pause 
Exit /B 240 
) 
SetLocal EnableDelayedExpansion 
Call :StrDate "yyyy" "mm" "dd" 

If Not %DeltaDay%==0 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyy" "mm" "dd" 

Set "BoxOut=D:\0_TELEGR\%yyyy%\%mm%\%dd%\отправленные\" 
Set "BoxArc=D:\DMAIL\send\" 

rem Set "BoxData=%BoxArc%\%yyyy%\%mm%\%dd%" 
rem Md "%BoxData%" 2>nul 
rem Md "%BoxOut%" 2>nul 

:Begin 
If "%~1"=="" Pause &GoTo :Eof 

Set SCopy=Copy /-Y "%~1" "%BoxOut%" 
Set SMove=Move /-Y "%~1" "%BoxArc%" 
Echo %SCopy% &%SCopy% &&(Echo %SMove% &%SMove%) 


Shift 
GoTo :Begin 

:StrDate 
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d" 
Set "%~1=%@Tdate:~0,4%" 
Set "%~2=%@Tdate:~4,2%" 
Set "%~3=%@Tdate:~6,2%" 
GoTo :Eof 

:FromNow 
rem Пересчет даты на заданное кол-во дней 
rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd 

rem Заимствовано http://forum.oszone.net/thread-186889.html 
rem вызов Call :FromNow %DeltaDay% %Date% "yyyy" "mm" "dd" 
rem результат в перемменной %yyyy% %mm% %dd% 

SetLocal 
Set DT=%2 
Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100 
Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4 
Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001 
Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11 
Set /A J=J+2-12*L,I=100*(N-49)+I+L 
Set /A yyyy=I,mm=100+J,dd=100+K 
EndLocal &(Set %~3=%yyyy%&Set %~4=%mm:~-2%&Set %~5=%dd:~-2%) 
GoTo :Eof


P.S. не знаю, но может быть на vbs будет лучше работать

Последний раз редактировалось Sergey.l, 11-02-2018 в 15:18.


Отправлено: 14:19, 11-02-2018 | #7


Ветеран


Contributor


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

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


Изображения
Тип файла: png я20180211.png
(558.4 Kb, 13 просмотров)

Цитата Sergey.l:
Почему то переносит по одному файлу, когда выделяю два и более файла!? »
Не верю! Строго говоря, переносятся по одному файлу, но за один запуск батника. Картинку прилагаю. Там 59 файлов

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


Последний раз редактировалось megaloman, 11-02-2018 в 16:06.

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

Отправлено: 15:58, 11-02-2018 | #8


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


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

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


megaloman, действительно, в проводнике все работает с любым количеством файлов. А в тоталкомандере не получается. Закрепил на панели, выделяю правой кнопкой неск файлом, переношу на значек и срабатывает только один файл. Не пойму почему, наверно надо прописать какой то ключ в значке, чтобы действие применялось к выделенным файлам

Отправлено: 16:58, 11-02-2018 | #9


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


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

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


megaloman, спасибо еще раз! Разобрался с тотал командером. Прописал в параметрах запуска батника с панели тоталкоммандера ключ %P%S который вставляет имена выделенных файлов с полными путями. Т.е. я просто выделяю перемещаемые файлы и нажимаю кнопку! Супер!

Отправлено: 18:05, 11-02-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - bat-скрипт для массового копирования файлов akt Скриптовые языки администрирования Windows 3 02-05-2013 17:26
Система - Подскажите программу для копирования / перемещения большого количества мелких файлов kiripanda Программное обеспечение Windows 13 10-08-2010 21:00
Программа для мониторинга копирования(перемещения) файлов. Ultrix Хочу все знать 1 09-02-2010 08:19
Скрипт для копирования файлов с 1 сервера на несколько andro_id Программирование в *nix 2 04-09-2008 11:48
Мониторинг копирования (перемещения) файлов по сети glazemir Microsoft Windows NT/2000/2003 8 15-05-2008 09:07




 
Переход