Показать полную графическую версию : Скрипт создающий папку с тек.датой и перемещ. в нее файлы
Есть сетевая папка в которую сохраняются скриншоты формата "Snap - 2017-02-06 09.45.00.png" и так в течении дня с разным временем, каждый день.
За день- 60-100 скриншотов. За неделю накапливается слишком много скриншотов. Надо это упорядочивать.
Нужно настроить планировщик на выполнения скрипта BAT файла, который бы создавал папку с текущей датой и в нее перемещал скриншоты за сегодняшний день.
Maza11, а если «в текущий день» ему по каким-то причинам не удастся отработать — что тогда? Скриншоты так и останутся «висеть». Надо не с текушей датой создавать, а перебирать все скриншоты, по шаблону имени создавать папку (если ещё не создана) и перемещать в неё скриншот. Я бы делал так.
а если «в текущий день» ему по каким-то причинам не удастся отработать — что тогда? Скриншоты так и останутся «висеть». Надо не с текушей датой создавать, а перебирать все скриншоты, по шаблону имени создавать папку (если ещё не создана) и перемещать в неё скриншот. Я бы делал так. »
Вы правы, но создание шаблона наверно сложно, я со скриптами совсем не дружу. Поэтому составил задание попроще.
На 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
Путь к исходной папке указывается аргументом скрипта.
Цитата Iska:
Путь к исходной папке указывается аргументом скрипта. »
что такое аргумент скрипта, в свойствах задания в планировщике указать C:\move.vbs "\\Backup\box\" ???
в задании прописал C:\move.vbs "\\Backup\box\"
ругается
Usage: cscript.exe //nologo "move.vbs" <Source folder>
как указать ему папку ?
Сделайте экспорт задания в xml и выложите сюда.
Сделайте экспорт задания в xml и выложите сюда. »
у меня Win XP, не нашел я там экспорта заданий в xml
если на скрипт перетянуть папку с файлами, то он отрабатывает. Внутри создались папки с датами и файлики переместились, круто. Только осталось с планировщиком разобраться/ Может он UNC путь не понимает, т.к. перетягиванием папки на скрипт я занимался локально.
http://i90.fastpic.ru/big/2017/0208/46/02272044ec1567932c3445ab0e105346.jpg
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. Пытаюсь по Вашему скрину: кажется, в панели управления найти назначенные задания -> кнопка (иконка?) новое задание ->выдаст окно поиска исполнимого файла. Затем настроите расписание. Там всё понятно
Maza11, разве нет такого в XP? »
В Windows XP — нету.
Maza11, покажите результаты исполнения:
assoc .vbs
ftype VBSFile
только либо просто скопируйте текст из окна консоли, либо не делайте масштабирование на скриншоте.
Кроме того, Вы можете задать в свойствах задания не .vbs, а сам исполняемый файл:
"%SystemRoot%\System32\wscript.exe" "C:\move.vbs" "\\Backup\box"
Цитата megaloman:
Настройте планировщик на его выполнение, в XP, мне помнится, это не проблема, сделайте повтор его исполнения с нужной Вам периодичностью, хоть сто раз в день, хоть раз в неделю, месяц итд. Не на чем вспомнить XP. Пытаюсь по Вашему скрину: кажется, в панели управления найти назначенные задания -> кнопка (иконка?) новое задание ->выдаст окно поиска исполнимого файла. Затем настроите расписание. Там всё понятно »
Ваш BAT файл работает, спасибо
Почему-то не работает. Помогите пожалуйста.
@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
megaloman, Спасибо Вам огромное!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.