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

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

Ответить
Настройки темы
CMD/BAT - [решено] Копирование папок с текущей датой +1 день в названии (кроме выходных)

Аватара для Сантей

Пользователь


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

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


Помогите, не могу разобраться, я работаю на телевидении, мне надо чтобы каждый день создавалась папка на завтра, с пропуском выходных дней, но не просто создавалась, а копировалось всё из сегодняшней, так сказать:
Код: Выделить весь код
copy %день%_%месяц%_News %день+1%_%месяц%_News

Таков формат названия папки, в ней тоже есть папки и файлы формата %день%_%месяц%_Фамилия.
Надо чтоб они тоже переименовывались в %день+1%_%месяц%_Фамилия

Отправлено: 17:12, 25-02-2015

 

Ветеран


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

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


Цитата Сантей:
пропуском выходных дней »
как вы себе это представляете?)
я в свое время специальный календарь писал типа планинга, чтобы шедулеры разные не жестко к дням недели привязывались,а к тому что я задам, Ибо праздников в стране дофига.

-------
консольный клиент telegram для Windows: www.elapser.info


Отправлено: 16:34, 26-02-2015 | #2



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

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


(*.*)


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

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


Пропуск выходных дней (СБ и ВС) легко организует планировщик (о праздничных он не знает, конечно).

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 17:53, 26-02-2015 | #3


Аватара для Сантей

Пользователь


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

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


Цитата Опиум:
как вы себе это представляете?)
я в свое время специальный календарь писал типа планинга, чтобы шедулеры разные не жестко к дням недели привязывались,а к тому что я задам, Ибо праздников в стране дофига. »
с праздниками хрен с ними, главное выходные дни пропускать. Вот слепил пока копирование, осталось переименование:
Код: Выделить весь код
@echo off
SetLocal EnableExtensions
 
:: Добавление к дате +1, +3 дня
call :fromDate "%date%" +0 ddmmyyyy1 wd1
call :fromDate "%date%" +1 ddmmyyyy2 wd2
call :fromDate "%date%" +3 ddmmyyyy3 wd3

 :: Проверка на день недели и копирование папки
if "%wd1%" neq "5" if exist "%ddmmyyyy1:~-2,2%_%ddmmyyyy1:~-5,2%_News" xcopy /s /e /q /i "%ddmmyyyy1:~-2,2%_%ddmmyyyy1:~-5,2%_News" "%ddmmyyyy2:~-2,2%_%ddmmyyyy2:~-5,2%_News"
if "%wd1%"=="5" if exist "%ddmmyyyy1:~-2,2%_%ddmmyyyy1:~-5,2%_News" xcopy /s /e /q /i "%ddmmyyyy1:~-2,2%_%ddmmyyyy1:~-5,2%_News" "%ddmmyyyy3:~-2,2%_%ddmmyyyy3:~-5,2%_News"
 
 
 
pause>nul & goto :eof
 
 
:FromDate [Дата] [действие (+-) Число дней] [Переменная для хранения результата]
:: Функция работы с датами
setLocal
set "now=%~1"
set /a yyyy=%now:~-4%
set /a mm=1%now:~3,2%-100
set /a dd=1%now:~,2%-100
set /a JD=%~2+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, DW=(JD+1)%%7
EndLocal& set "%~3=%yyyy%.%mm:~-2%.%dd:~-2%" & if %DW%==0 (set "%~4=7") else (set "%~4=%DW%")
exit /b

Отправлено: 13:09, 02-03-2015 | #4


Ветеран


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

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


Сантей, а не проще ли использовать такой код:


Код: Выделить весь код
@echo off

for /f "tokens=1,2,4,5 delims=.-/" %%i in ('
 mshta vbscript:Execute("Set x=CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1):If Weekday(Now,vbMonday)<>5 Then:x.Write(Date&""-""&DateAdd(""D"",1,Date)):Else x.Write(Date&"".""&DateAdd(""D"",3,Date)):End If:Close()"^)
') do (
 for /f %%m in ('dir/a/b %%i_%%j_News') do (
  for /f "tokens=1,2* delims=_" %%n in ("%%~nxm") do (
   if "%%n_%%o" equ "%%i_%%j" (
    echo f| xcopy/i/h/k/y "%%i_%%j_News\%%m" "%%k_%%l_News\%%k_%%l_%%p">nul
   ) else (
    echo f| xcopy/i/h/k/y "%%i_%%j_News\%%m" "%%k_%%l_News\%%m">nul
   )
   )
  )
 )

exit/b

?



Цитата Сантей:
Таков формат названия папки, в ней тоже есть папки и файлы формата %день%_%месяц%_Фамилия.
Надо чтоб они тоже переименовывались в %день+1%_%месяц%_Фамилия »

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

Отправлено: 21:37, 02-03-2015 | #5


Аватара для Сантей

Пользователь


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

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


Цитата Georgio:
а не проще ли использовать такой код: »
я в том-то несколько дней разбирался, а в этом еще неделю придется Спасибо, он работает, но я не до конца объяснил (моя вина), структура чуть глубже выглядит:
Код: Выделить весь код
%день%_%месяц%_News
   -%день%_%месяц%_Фамилия----->%день%_%месяц%_Фамилия.file
   -%день%_%месяц%_Фамилия----->%день%_%месяц%_Фамилия.file
   -%день%_%месяц%_Фамилия.file
Переименовывает только содержимое папки %день%_%месяц%_News.
Еще куда можно путь к папке подставить, чтоб не хранить cmd рядом?

Последний раз редактировалось Сантей, 03-03-2015 в 13:33.


Отправлено: 13:06, 03-03-2015 | #6


Ветеран


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

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


Цитата Сантей:
Спасибо, он работает, но я не до конца объяснил (моя вина), структура чуть глубже выглядит »


Сантей, тогда всё ещё проще (так как уже не нужно бояться, что код переименует что-то лишнее):


Код: Выделить весь код
@echo off

for /f "tokens=1,2,4,5 delims=.-/" %%i in ('
 mshta vbscript:Execute("Set x=CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1):If Weekday(Now,vbMonday)<>5 Then:x.Write(Date&""-""&DateAdd(""D"",1,Date)):Else x.Write(Date&"".""&DateAdd(""D"",3,Date)):End If:Close()"^)
') do (
 for /f %%m in ('dir/a-d/b/s %%i_%%j_News') do (
  set x=%%m
  echo f|>nul cmd/v/c xcopy/h/k/y "%%m" "!x:\%%i_%%j_=\%%k_%%l_!"
  )
 )

exit/b

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

Отправлено: 13:48, 03-03-2015 | #7


Аватара для Сантей

Пользователь


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

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


Georgio, а как лучше добавить проверку на существование завтрашней папки? вдруг комп перезагружаться будет, а скрипт в автозагрузке

Отправлено: 16:19, 03-03-2015 | #8


Ветеран


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

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


Цитата Сантей:
а как лучше добавить проверку на существование завтрашней папки? вдруг комп перезагружаться будет, а скрипт в автозагрузке »

Код: Выделить весь код
@echo off

for /f "tokens=1,2,4,5 delims=.-/" %%i in ('
 mshta vbscript:Execute("Set x=CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1):If Weekday(Now,vbMonday)<>5 Then:x.Write(Date&""-""&DateAdd(""D"",1,Date)):Else x.Write(Date&"".""&DateAdd(""D"",3,Date)):End If:Close()"^)
') do (
 for /f %%m in ('if not exist "%%k_%%l_News" dir/a-d/b/s "%%i_%%j_News"') do (
  set x=%%m
  echo f|>nul cmd/v/c xcopy/h/k/y "%%m" "!x:\%%i_%%j_=\%%k_%%l_!"
  )
 )

exit/b


Цитата Сантей:
куда можно путь к папке подставить, чтоб не хранить cmd рядом? »

Код: Выделить весь код
@echo off

:: Директория, в которой находятся папки "*_*_News":
set "dir=C:\Test"

for /f "tokens=1,2,4,5 delims=.-/" %%i in ('
 mshta vbscript:Execute("Set x=CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1):If Weekday(Now,vbMonday)<>5 Then:x.Write(Date&""-""&DateAdd(""D"",1,Date)):Else x.Write(Date&"".""&DateAdd(""D"",3,Date)):End If:Close()"^)
') do (
 for /f %%m in ('if not exist "%dir%\%%k_%%l_News" dir/a-d/b/s "%dir%\%%i_%%j_News"') do (
  set x=%%m
  echo f|>nul cmd/v/c xcopy/h/k/y "%%m" "!x:\%%i_%%j_=\%%k_%%l_!"
  )
 )

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

Отправлено: 23:26, 03-03-2015 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - архивирование файла с текущей датой mcintosh55 Скриптовые языки администрирования Windows 1 22-12-2014 20:09
Любой язык - [решено] Создание папки с датой в названии и копирование туда файлов Chiz3000 Скриптовые языки администрирования Windows 2 30-07-2013 10:09
CMD/BAT - Сранение даты из файла с текущей датой InVariable Скриптовые языки администрирования Windows 0 07-02-2012 11:53
CMD/BAT - [решено] Копирование с флешки в папку на компьютере файлов с текущей датой bazik83 Скриптовые языки администрирования Windows 6 19-05-2010 10:17
CMD/BAT - [решено] Проверить наличие файла с текущей датой. OlegStarov Скриптовые языки администрирования Windows 4 21-04-2009 12:11




 
Переход