Как объединить эти две петли «ЗА» в одну? - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь объединить два цикла FOR в один.

Вот мой код:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set BackupDest=D:\backup

for /D %%I in ("%HomeDrive%\users\*") do if exist "%BackupDest%\%%~nI\" (

xcopy "%HomeDrive%\users\%%~nI\Desktop" "%BackupDest%\%%~nI\Desktop\" /e /i /y
xcopy "%HomeDrive%\users\%%~nI\Documents" "%BackupDest%\%%~nI\Documents\" /e /i /y

)

for /f "tokens=*" %%I in ('dir /a:d-h /b "%HomeDrive%\users\*" ^| findstr /b /e /i /l /v /g:"%~dp0\bin\exclude_users.txt"') do if not exist "%BackupDest%\%%~nI\" (
echo Destination folder of the user %%~nI is missing
)

Я уверен, что мы можем сделать это в этом случае?

Если да, то как мне этого добиться?

Любая помощь очень полезна.

1 Ответ

0 голосов
/ 09 марта 2020
@echo off
setlocal

set "BackupDest=D:\backup"

for /f "tokens=*" %%I in (
    'dir /a:d-h /b "%HomeDrive%\users\*" ^| findstr /b /e /i /l /v /g:"%~dp0exclude_user.txt"'
) do (
    if exist "%BackupDest%\%%~nxI\" (
        xcopy "%HomeDrive%\users\%%~nxI\Desktop" "%BackupDest%\%%~nxI\Desktop\" /e /i /y
        xcopy "%HomeDrive%\users\%%~nxI\Documents" "%BackupDest%\%%~nxI\Documents\" /e /i /y
    ) else (
        echo Destination folder of the user %%~nxI is missing
    )
)

Использовать синтаксис if exist ... (...) else (...).

В имени папки используются модификаторы nx, так как папка может быть названа, например, firstname.lastname. Если вы используете только n, вы получите только часть имени папки firstname.

...