![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Скрипт для копирования/перемещения выделенных файлов в заранее указанные каталоги |
|
VBS/WSH/JS - [решено] Скрипт для копирования/перемещения выделенных файлов в заранее указанные каталоги
|
Новый участник Сообщения: 41 |
Доброго времени суток!
Друзья, помогите написать скрипт для копирования/перемещения выделенных файлов в указанные заранее каталоги. (больше интересует копирование, а перемещение, укажите, пожалуйста, дополнительно в комментарии) Конкретно хотел создать кнопочку в Тоталкомандере на вертикальной панели чтобы выделить файлы и нажав на нее файлы копировались/перемещались в указанные в скрипте каталоги Например есть два каталога 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 |
![]() Новый участник Сообщения: 25
|
Профиль | Отправить PM | Цитировать Подпишусь автору.
У меня почти такая же история. Нужно батник которые скопирует определенные файлы с флешки на диск Д и в папку. Основные параметры кто сможет написать буду очень благодарен,а название файлов и куда копировать сам впишу. |
Отправлено: 07:28, 09-02-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2735
|
Профиль | Отправить 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 Пропишите свои пути. Если надо именно vbs - js -пишите |
------- Последний раз редактировалось megaloman, 09-02-2018 в 15:18. Отправлено: 14:56, 09-02-2018 | #3 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Цитата 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 т.к. мне нужна будет дата сегодня-вчера, работаю сутки Папки с датой в пути уже есть, я создаю такие папки когда прихожу на работу. и в течении дня мне приходиться раскидывать в них файлы в большом количестве. |
|
Последний раз редактировалось Sergey.l, 10-02-2018 в 21:17. Отправлено: 21:05, 10-02-2018 | #4 |
Новый участник Сообщения: 41
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2735
|
Профиль | Отправить 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 |
------- Отправлено: 13:17, 11-02-2018 | #6 |
Новый участник Сообщения: 41
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Цитата Sergey.l:
|
|
------- Последний раз редактировалось megaloman, 11-02-2018 в 16:06. Отправлено: 15:58, 11-02-2018 | #8 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать megaloman, действительно, в проводнике все работает с любым количеством файлов. А в тоталкомандере не получается. Закрепил на панели, выделяю правой кнопкой неск файлом, переношу на значек и срабатывает только один файл. Не пойму почему, наверно надо прописать какой то ключ в значке, чтобы действие применялось к выделенным файлам
|
Отправлено: 16:58, 11-02-2018 | #9 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать megaloman, спасибо еще раз! Разобрался с тотал командером. Прописал в параметрах запуска батника с панели тоталкоммандера ключ %P%S который вставляет имена выделенных файлов с полными путями. Т.е. я просто выделяю перемещаемые файлы и нажимаю кнопку! Супер!
|
Отправлено: 18:05, 11-02-2018 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|