【问题标题】:For loop : variable not taken into accountFor循环:未考虑变量
【发布时间】:2020-03-28 10:41:12
【问题描述】:

在检查目标文件夹的写入权限时,下面的批处理脚本有问题。

如果只有写保护的文件夹,它会很好地工作。但如果同时存在写保护文件夹和非写保护文件夹,它也会对写保护文件夹运行 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

感谢您的帮助。

【问题讨论】:

  • 你忘了取消定义write_ok,所以一旦它被定义,它就会一直被定义。

标签: windows for-loop batch-file variables set


【解决方案1】:

您忘记取消设置 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^)
)

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 2021-10-31
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2019-06-01
    • 1970-01-01
    相关资源
    最近更新 更多