Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Помогите подправить скрипт (http://forum.oszone.net/showthread.php?t=339581)

mayroman 07-03-2019 19:37 2861987

Помогите подправить скрипт
 
Добрый день!

Я пытаюсь написать скрипт чтобы 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 конкретных каталогов из теневой копии.

megaloman 07-03-2019 21:27 2862001

Не проверял
Код:

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 08-03-2019 14:01 2862095

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

Но, ИМХО, всё-таки это какой-то очень извращенный способ копирования.

mayroman 10-03-2019 15:49 2862378

Цитата:

Цитата 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 вылетает ошибка "Отказано в доступе",
но думаю это можно решить.....


Время: 21:48.

Время: 21:48.
© OSzone.net 2001-