PDA

Показать полную графическую версию : Скрипт создающий папку с тек.датой и перемещ. в нее файлы


Maza11
08-02-2017, 13:01
Есть сетевая папка в которую сохраняются скриншоты формата "Snap - 2017-02-06 09.45.00.png" и так в течении дня с разным временем, каждый день.
За день- 60-100 скриншотов. За неделю накапливается слишком много скриншотов. Надо это упорядочивать.
Нужно настроить планировщик на выполнения скрипта BAT файла, который бы создавал папку с текущей датой и в нее перемещал скриншоты за сегодняшний день.

Iska
08-02-2017, 13:25
Maza11, а если «в текущий день» ему по каким-то причинам не удастся отработать — что тогда? Скриншоты так и останутся «висеть». Надо не с текушей датой создавать, а перебирать все скриншоты, по шаблону имени создавать папку (если ещё не создана) и перемещать в неё скриншот. Я бы делал так.

Maza11
08-02-2017, 13:36
а если «в текущий день» ему по каким-то причинам не удастся отработать — что тогда? Скриншоты так и останутся «висеть». Надо не с текушей датой создавать, а перебирать все скриншоты, по шаблону имени создавать папку (если ещё не создана) и перемещать в неё скриншот. Я бы делал так. »
Вы правы, но создание шаблона наверно сложно, я со скриптами совсем не дружу. Поэтому составил задание попроще.

Iska
08-02-2017, 13:53
На WSH:
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFile

Dim strDestFolder


If WScript.Arguments.Count = 1 Then
strSourceFolder = WScript.Arguments.Item(0)

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
With WScript.CreateObject("VBScript.RegExp")
.Pattern = "^Snap - (\d{4}-\d{2}-\d{2}) \d{2}\.\d{2}\.\d{2}\.png$"
.IgnoreCase = True

For Each objFile In objFSO.GetFolder(strSourceFolder).Files
If .Test(objFile.Name) Then
strDestFolder = objFSO.BuildPath(strSourceFolder, .Execute(objFile.Name).Item(0).Submatches(0))

If Not objFSO.FolderExists(strDestFolder) Then
objFSO.CreateFolder strDestFolder
End If

objFile.Move strDestFolder & "\"
End If
Next
End With
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 2
End If

Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
WScript.Quit 1
End If

WScript.Quit 0

Путь к исходной папке указывается аргументом скрипта.

Maza11
08-02-2017, 14:11
Цитата Iska:
Путь к исходной папке указывается аргументом скрипта. »
что такое аргумент скрипта, в свойствах задания в планировщике указать C:\move.vbs "\\Backup\box\" ???

Maza11
08-02-2017, 15:42
в задании прописал C:\move.vbs "\\Backup\box\"
ругается
Usage: cscript.exe //nologo "move.vbs" <Source folder>
как указать ему папку ?

Iska
08-02-2017, 16:11
Сделайте экспорт задания в xml и выложите сюда.

Maza11
08-02-2017, 16:45
Сделайте экспорт задания в xml и выложите сюда. »
у меня Win XP, не нашел я там экспорта заданий в xml
если на скрипт перетянуть папку с файлами, то он отрабатывает. Внутри создались папки с датами и файлики переместились, круто. Только осталось с планировщиком разобраться/ Может он UNC путь не понимает, т.к. перетягиванием папки на скрипт я занимался локально.

http://i90.fastpic.ru/big/2017/0208/46/02272044ec1567932c3445ab0e105346.jpg

alpap
08-02-2017, 20:17
Maza11,
в планировщике в папке где задание на самой строке задания правой клавишей мыши и выбрать в меню пункт экспортировать, разве нет такого в XP?

megaloman
08-02-2017, 20:58
@Echo Off

Set "BoxIn=\\TOSHIBA\Test1"
Set "BoxOut=\\TOSHIBA\Test1"

Set "Mask=Snap - 20??-??-?? ??.??.??.png"

FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%Mask%" /b /A:-D 2^>nul`) DO (
FOR /F "usebackq tokens=3 delims= " %%d IN ('%%f') DO (
If Not Exist "%BoxOut%\%%d" Md "%BoxOut%\%%d"
Copy "%BoxIn%\%%f" "%BoxOut%\%%d\" >nul &&Del "%BoxIn%\%%f"
)
)
Настройте планировщик на его выполнение, в XP, мне помнится, это не проблема, сделайте повтор его исполнения с нужной Вам периодичностью, хоть сто раз в день, хоть раз в неделю, месяц итд. Не на чем вспомнить XP. Пытаюсь по Вашему скрину: кажется, в панели управления найти назначенные задания -> кнопка (иконка?) новое задание ->выдаст окно поиска исполнимого файла. Затем настроите расписание. Там всё понятно

Iska
09-02-2017, 07:39
Maza11, разве нет такого в XP? »
В Windows XP — нету.

Maza11, покажите результаты исполнения:
assoc .vbs
ftype VBSFile
только либо просто скопируйте текст из окна консоли, либо не делайте масштабирование на скриншоте.

Кроме того, Вы можете задать в свойствах задания не .vbs, а сам исполняемый файл:
"%SystemRoot%\System32\wscript.exe" "C:\move.vbs" "\\Backup\box"

Maza11
09-02-2017, 10:27
Цитата megaloman:
Настройте планировщик на его выполнение, в XP, мне помнится, это не проблема, сделайте повтор его исполнения с нужной Вам периодичностью, хоть сто раз в день, хоть раз в неделю, месяц итд. Не на чем вспомнить XP. Пытаюсь по Вашему скрину: кажется, в панели управления найти назначенные задания -> кнопка (иконка?) новое задание ->выдаст окно поиска исполнимого файла. Затем настроите расписание. Там всё понятно »
Ваш BAT файл работает, спасибо

lSVl
30-03-2018, 09:50
Почему-то не работает. Помогите пожалуйста.
@Echo On

Set "BoxIn=c:\temp"
Set "BoxOut=c:\temp"

Set "Mask=sshot-20??-??-??-[??-??-??].png"

FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%Mask%" /b /A:-D 2^>nul`) DO (
FOR /F "usebackq tokens=3 delims= " %%d IN ('%%f') DO (
If Not Exist "%BoxOut%\%%d" Md "%BoxOut%\%%d"
Copy "%BoxIn%\%%f" "%BoxOut%\%%d\" >nul &&Del "%BoxIn%\%%f"
)
)
pause >nul

C:\>Set "BoxIn=c:\temp"

C:\>Set "BoxOut=c:\temp"

C:\>Set "Mask=sshot-20??-??-??-[??-??-??].png"

C:\>FOR /F "usebackq delims=" %f IN (`Dir "c:\temp\sshot-20??-??-??-[??-??-??].p
ng" /b /A:-D 2>nul`) DO (FOR /F "usebackq tokens=3 delims= " %d IN ('%f') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\%f" "c:\temp\%d\" 1>nul && Del "c:\temp\%f"
) )

C:\>(FOR /F "usebackq tokens=3 delims= " %d IN ('sshot-2018-03-30-[11-20-56].png
') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\sshot-2018-03-30-[11-20-56].png" "c:\temp\%d\" 1>nul && Del "c
:\temp\sshot-2018-03-30-[11-20-56].png"
) )

C:\>(FOR /F "usebackq tokens=3 delims= " %d IN ('sshot-2018-03-30-[11-20-57].png
') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\sshot-2018-03-30-[11-20-57].png" "c:\temp\%d\" 1>nul && Del "c
:\temp\sshot-2018-03-30-[11-20-57].png"
) )

C:\>(FOR /F "usebackq tokens=3 delims= " %d IN ('sshot-2018-03-30-[11-20-58].png
') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\sshot-2018-03-30-[11-20-58].png" "c:\temp\%d\" 1>nul && Del "c
:\temp\sshot-2018-03-30-[11-20-58].png"
) )

C:\>(FOR /F "usebackq tokens=3 delims= " %d IN ('sshot-2018-03-30-[11-20-59].png
') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\sshot-2018-03-30-[11-20-59].png" "c:\temp\%d\" 1>nul && Del "c
:\temp\sshot-2018-03-30-[11-20-59].png"
) )

C:\>(FOR /F "usebackq tokens=3 delims= " %d IN ('sshot-2018-03-30-[11-21-01].png
') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\sshot-2018-03-30-[11-21-01].png" "c:\temp\%d\" 1>nul && Del "c
:\temp\sshot-2018-03-30-[11-21-01].png"
) )

C:\>(FOR /F "usebackq tokens=3 delims= " %d IN ('sshot-2018-03-30-[11-21-02].png
') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\sshot-2018-03-30-[11-21-02].png" "c:\temp\%d\" 1>nul && Del "c
:\temp\sshot-2018-03-30-[11-21-02].png"
) )

C:\>(FOR /F "usebackq tokens=3 delims= " %d IN ('sshot-2018-03-30-[11-21-03].png
') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\sshot-2018-03-30-[11-21-03].png" "c:\temp\%d\" 1>nul && Del "c
:\temp\sshot-2018-03-30-[11-21-03].png"
) )

C:\>(FOR /F "usebackq tokens=3 delims= " %d IN ('sshot-2018-03-30-[11-21-04].png
') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\sshot-2018-03-30-[11-21-04].png" "c:\temp\%d\" 1>nul && Del "c
:\temp\sshot-2018-03-30-[11-21-04].png"
) )

C:\>(FOR /F "usebackq tokens=3 delims= " %d IN ('sshot-2018-03-30-[11-21-05].png
') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\sshot-2018-03-30-[11-21-05].png" "c:\temp\%d\" 1>nul && Del "c
:\temp\sshot-2018-03-30-[11-21-05].png"
) )

C:\>(FOR /F "usebackq tokens=3 delims= " %d IN ('sshot-2018-03-30-[11-21-07].png
') DO (
If Not Exist "c:\temp\%d" Md "c:\temp\%d"
Copy "c:\temp\sshot-2018-03-30-[11-21-07].png" "c:\temp\%d\" 1>nul && Del "c
:\temp\sshot-2018-03-30-[11-21-07].png"
) )

C:\>pause 1>nul

Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\User>tree.exe c:\temp
c:\temp
|-- sshot-2018-03-30-[11-20-56].png
|-- sshot-2018-03-30-[11-20-57].png
|-- sshot-2018-03-30-[11-20-58].png
|-- sshot-2018-03-30-[11-20-59].png
|-- sshot-2018-03-30-[11-21-01].png
|-- sshot-2018-03-30-[11-21-02].png
|-- sshot-2018-03-30-[11-21-03].png
|-- sshot-2018-03-30-[11-21-04].png
|-- sshot-2018-03-30-[11-21-05].png
`-- sshot-2018-03-30-[11-21-07].png

0 directories, 10 files

C:\Users\User>

megaloman
30-03-2018, 12:07
lSVl, Решалась частная задачаскриншоты формата "Snap - 2017-02-06 09.45.00.png" »
Вы пытаетесь частное решение применить к другой задаче sshot-20??-??-??-[??-??-??].png»@Echo Off

Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_In"

Set "Mask=sshot-20??-??-??-[??-??-??].png"

FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%Mask%" /b /A:-D 2^>nul`) DO (
FOR /F "usebackq tokens=2,3,4 delims=-" %%i IN ('%%f') DO (
If Not Exist "%BoxOut%\%%i-%%j-%%k" Md "%BoxOut%\%%i-%%j-%%k"
Copy "%BoxIn%\%%f" "%BoxOut%\%%i-%%j-%%k\" >nul &&Del "%BoxIn%\%%f"
)
)
Загвоздка в том, чтобы выдернуть дату из имени файла - приходится подстраиваться под формат имени.@Echo Off
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_In"

Set "Mask=sshot-20??-??-??-[??-??-??].png"

FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%Mask%" /b /A:-D /O:D /T:W 2^>nul`) DO Call :Separator "%BoxIn%\%%f" "%BoxOut%"
GoTo :Eof

:Separator
Set "DName=%~t1"
Set "DName=%Dname:~6,4%-%Dname:~3,2%-%Dname:~0,2%"
If Not Exist "%~2\%DName%" Md "%~2\%DName%"
Copy %1 "%~2\%DName%\" >nul &&Del %1
GoTo :Eof

lSVl
30-03-2018, 13:57
megaloman, Спасибо Вам огромное!




© OSzone.net 2001-2012