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

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

Ответить
Настройки темы
CMD/BAT - [решено] Помогите подправить скрипт

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


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

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


Добрый день!

Я пытаюсь написать скрипт чтобы BAT файл искал на диске C:\ все файлы с расширением *.PST и копировал эти файл в определенный каталог через теневые копии.
Часть кода с теневым копированием я уже написал, теперь осталась вторая часть

Код: Выделить весь код
del c:\2bTznURgX.bat
for /f "tokens=*" %%I in ('dir C:\Users\*.pst /b /s') do (
echo robocopy "%%~dpI" d:\backup\ *.pst /MIR /S /Z /EFSRAW /R:1 /W:1>>c:\2bTznURgX.bat
)
c:\2bTznURgX.bat
Вся загвоздка в том, что переменная %%~dpI выдает полный путь с "/" в конце, а robocopy категорически не хочет копировать с этим символом,
как мне удалить символ "/" из переменной %%~dpI в самом конце ?

Код: Выделить весь код
--------- c:\2bTznURgX.bat --------------
robocopy "C:\Users\user\Documents\555\" D:\backup\ *.pst /MIR /S /Z /EFSRAW /R:1 /W:1
robocopy "C:\Users\Users\user\Documents\342\" D:\backup\ *.pst /MIR /S /Z /EFSRAW /R:1 /W:1
robocopy "C:\Users\Users\user\Documents\123\" D:\backup\ *.pst /MIR /S /Z /EFSRAW /R:1 /W:1
robocopy "C:\Users\Users\user\Downloads\" D:\backup\ *.pst /MIR /S /Z /EFSRAW /R:1 /W:1
нужно чтобы исходный путь к каталогу был без слэша на конце

P.S. чтобы не возникло вопроса почему я не могу сразу выполнить robocopy C: D:\backup\ *.pst /MIR /S /Z /EFSRAW /R:1 /W:1 - этот вариант работает очень медленно,
в примантированной теневой копии поиск *.pst и идёт очень долго и компьютер при этом тормозит. Я хочу в начале на диске найти все *.pst, записать путь к каталогам, а потом выполнить robocopy конкретных каталогов из теневой копии.

Отправлено: 19:37, 07-03-2019

 

Ветеран


Contributor


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

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


Не проверял
Код: Выделить весь код
del c:\2bTznURgX.bat
for /f "tokens=*" %%I in ('dir C:\Users /b /s /A:D') do If Exist "%%I\*.pst" (
echo robocopy "%%I" d:\backup\ *.pst /MIR /S /Z /EFSRAW /R:1 /W:1>>c:\2bTznURgX.bat
)
c:\2bTznURgX.bat
ИМХО, /S здесь в robocopy вреден и существенно замедляет работу. Но я не проверял ...

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


Последний раз редактировалось megaloman, 07-03-2019 в 21:41.


Отправлено: 21:27, 07-03-2019 | #2



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

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


Ветеран


Contributor


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

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


mayroman, Или вот способ (у себя смоделировал, Вы для своего случая приспособите)
Код: Выделить весь код
@Echo Off
	>"Z:\out.txt" (for /f "tokens=*" %%I in ('dir D:\CMD\*.js /b /s') do (
		Set "P=%%~dpI" &Call Echo Robocopy "%%P:~0,-1%%" .... 
	))
Exit /B 0
Но, ИМХО, всё-таки это какой-то очень извращенный способ копирования.

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


Отправлено: 14:01, 08-03-2019 | #3


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


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

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


Цитата megaloman:
megaloman »
Большое спасибо! Первый вариант работает, второй пока не пробовал.
Вот полный код:

Код: Выделить весь код
Setlocal EnableDelayedExpansion
del c:\2bTznURgX.bat
rmdir C:\2bTznURgX /q
SET ShadowPath=
wmic shadowcopy call create Volume='C:\'
VSSAdmin List Shadows /for=C:\>shadow.tmp
FOR /F "usebackq tokens=1,2* delims=:" %%A IN (`FINDSTR /I /C:"\\?\GLOBALROOT" shadow.tmp`) DO SET ShadowPath=%%B
MKLINK /D "C:\2bTznURgX" %ShadowPath%\

for /f "tokens=*" %%I in ('dir C:\2bTznURgX /b /s /A:D') do If Exist "%%I\*.pst" (
echo robocopy "%%I" "d:\backup\%date%\%computername%\!random!!random!" *.pst /MIR /S /EFSRAW /R:1 /W:1>>c:\2bTznURgX.bat
)

echo rmdir C:\2bTznURgX /q>>c:\2bTznURgX.bat
echo del c:\2bTznURgX.bat /q>>c:\2bTznURgX.bat

c:\2bTznURgX.bat
Через dir C:\2bTznURgX /b /s /A:D поиск *.pst идет намного быстрее нежели через robocopy

Пока еще не совсем понял механизм как удалять старые теневые копии vssadmin delete shadows /for=c: /oldest вылетает ошибка "Отказано в доступе",
но думаю это можно решить.....

Отправлено: 15:49, 10-03-2019 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2010 - помогите, подправить макрос kontox Microsoft Office (Word, Excel, Outlook и т.д.) 0 19-11-2014 12:57
Помогите подправить скрипт! zga029 Хочу все знать 3 21-12-2012 09:51
Помогите подправить косяки шаблона DLE bucefal82 Вебмастеру 0 29-09-2011 09:23
[решено] Помогите подправить конфигурацию Craft87 Выбор отдельных компонентов компьютера и конфигурации в целом 28 11-09-2011 04:32
VBS/WSH/JS - [решено] Помогите подправить скрипт VBS Pozia Скриптовые языки администрирования Windows 37 09-04-2010 13:33




 
Переход