[CMD] Копирование по сети данных пользователей

mikluxa_maklay

Новый пользователь
Сообщения
4
Реакции
0
CMD/BATCH:
@echo off
for /F "delims=" %%i in (C:\temp\list.txt) do set v=%%i
echo %v%

for /f "skip=1" %%k in ('QUSER /server:%v%') do (
for %%j in (%%k) do set "alias=%%j"
)
 
echo %alias%>C:\temp\list2.txt

for /F "delims=" %%t in (C:\temp\list2.txt) do set z=%%t
echo %z%

set DirName=%v%
set DirName2=%z%
set SourceDir=\\%DirName%\C$\Users\%z%\
set BackupDir=\\report-mvs\C$\Temp1\%v%

set h=%time:~0,2%
set h=%h: =0%
set FullBackupDir=%BackupDir%[I]%date%[/I]%h%%time:~3,2%%time:~6,2%\

md %FullBackupDir%

robocopy %SourceDir% %FullBackupDir%\ /E /ZB /J /NFL /NDL /NJH /NJS /NC /NS /NP 2>nul >nul

for /f "tokens=* delims=" %%D in ('dir %BackupDir% /ad /b /o-d') do (
    if not %%D=="" (
        if not !NumFolders!==0 (
            set /a NumFolders-=1
        ) else (
            rd /s /q %BackupDir%%%D 2>nul >nul
        )
    )
)
echo %alias%>C:\temp\list2.txt
pause
Помогите модернизировать код для того чтобы можно копировать только определенные каталоги из профиля пользователя. Например "Desktop","Documents". Пока он копирует весь профиль пользователя. list - содержит имя компьютера, list2 - для активного пользователя.
 
Последнее редактирование модератором:
Здравствуйте!
Попробуйте так:
CMD/BATCH:
@echo off
for /F "delims=" %%i in (C:\temp\list.txt) do set PcName=%%i
echo "%PcName%"

for /f "skip=1" %%k in ('QUSER /server:%PcName%') do (
    for %%j in (%%k) do set "alias=%%j"
)
echo %alias%>C:\temp\list2.txt

for /F "delims=" %%t in (C:\temp\list2.txt) do set ActiveUser=%%t
echo "%ActiveUser%"

call :Backup Desktop
call :Backup Documents
pause
goto :eof

:Backup
    set "SourceDir=\\%PcName%\C$\Users\%ActiveUser%\%~1\"
    set "BackupDir=\\report-mvs\C$\Temp1\%PcName%\%~1"

    set "h=%time:~0,2%"
    set "h=%h: =0%"
    set "FullBackupDir=%BackupDir%[I]%date%[/I]%h%%time:~3,2%%time:~6,2%\"

    md "%FullBackupDir%"

    robocopy "%SourceDir%" "%FullBackupDir%\" /E /ZB /J /NFL /NDL /NJH /NJS /NC /NS /NP 2>nul >nul

    for /f "tokens=* delims=" %%D in ('dir "%BackupDir%" /ad /b /o-d') do (
        if not %%D=="" (
            if not !NumFolders!==0 (
                set /a NumFolders-=1
            ) else (
                rd /s /q "%BackupDir%%%D" 2>nul >nul
            )
        )
    )
exit /b
 
Поставьте команду echo перед robocopy и посмотрите, верные ли пути возвращает.
 
Вот что выдает. по факту все верно. именно оттуда именно туда.

Самое интересное что каталоги то он создает на удаленной машине. только ни чего не копирует туда. Мне кажется Robocopy не подходит а нужно использовать обыкновенный Copy

1674212054044.png
 
Последнее редактирование:
Ну теперь сравниваем, есть ли исходный путь, и читаем справку по robocopy.
Удалите 2>nul >nul и увидите, что ком. строка вам скажет, что команда составлена криво. Как минимум /J лишняя и вот этот концевой слеш не нужно указывать \"
В помощь:
 
Последнее редактирование:
Мне кажется Robocopy не подходит а нужно использовать обыкновенный Copy
нет, при копировании по сети robocopy или любое другое средство, умеющее сверять КС и повторно отправлять пакеты при разрыве связи, - обязательно.
Сеть, даже локальная, это нестабильная штука, и это нужно учитывать.
 
Последнее редактирование:
нет, при копировании по сети robocopy или любое другое средство, умеющее сверять КС и повторно отправлять пакеты при разрыве связи, - обязательно.
Сеть, даже локальная, это нестабильная штука, и это нужно учитывать.
Большое спасибо за помощь! разобравшись с robocopy и скриптик поехал.
 
Назад
Сверху Снизу