Для l oop: переменная не учитывается - PullRequest
0 голосов
/ 28 марта 2020

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

Хорошо работает, если есть только папки, защищенные от записи. Но если есть сочетание папок, защищенных от записи, и папок, не защищенных от записи, он также запустит xcopy для папок, защищенных от записи.

Я думаю, что это связано со значением, назначенным для "write_ok" "это всегда сохраняет последнее значение.

Но как я могу это исправить?

Вот мой код:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set BackupDest=D:\backup

for /f "tokens=*" %%I in ('dir /a:d-h /b "%HomeDrive%\users\*" ^| findstr /x /i /l /v /g:"%~dp0exclude_users.txt"') do if exist "%BackupDest%\%%I\" (

echo -----------------------------------------
echo      Processing user : %%I
echo -----------------------------------------
echo

:: checking write permissions
copy /y nul "%BackupDest%\%%I\.writable" >nul 2>&1 && set write_ok=1
if defined write_ok (
del "%BackupDest%\%%I\.writable"

xcopy "%%I\Desktop" "%BackupDest%\%%I\Desktop\" /e /i /y
xcopy "%%I\Documents" "%BackupDest%\%%I\Documents\" /e /i /y

) else (
echo       Access refused ^(check permissions^)
)
)

pause
exit

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 28 марта 2020

Вы забыли сбросить переменную write_ok, поэтому после ее установки она всегда определяется.
Просто сбросьте ее перед использованием:

:: checking write permissions
set "write_ok="
copy /y nul "%BackupDest%\%%I\.writable" >nul 2>&1 && set write_ok=1
if defined write_ok (
  del "%BackupDest%\%%I\.writable"
  xcopy "%%I\Desktop" "%BackupDest%\%%I\Desktop\" /e /i /y
  xcopy "%%I\Documents" "%BackupDest%\%%I\Documents\" /e /i /y
) else (
  echo       Access refused ^(check permissions^)
)

В качестве альтернативы вы можете полностью избежать переменной :

:: checking write permissions
copy /y nul "%BackupDest%\%%I\.writable" >nul 2>&1 && (
  del "%BackupDest%\%%I\.writable"
  xcopy "%%I\Desktop" "%BackupDest%\%%I\Desktop\" /e /i /y
  xcopy "%%I\Documents" "%BackupDest%\%%I\Documents\" /e /i /y
) || (
  echo       Access refused ^(check permissions^)
)
...