为什么我的批处理脚本隐藏已处理 files/folders?

Why is my batch script hiding processed files/folders?

这里的任何人都可以给我提示,为什么我的批处理脚本将成功处理的文件夹标记为系统、隐藏、非存档?此外,我什至无法通过资源管理器删除 "hidden" 属性(可能是因为 systemfolder 属性)。

该脚本旨在处理一个文件夹(作为参数传递给它),查找标记为只读的原始照片文件(在我的例子中为 .nef 文件)。对于每张只读照片,脚本都会将指定的文件复制到已处理的文件夹中,并根据照片文件名重命名该副本。

文件夹属性乱是robocopy造成的。 (没有那个命令就没有问题。)但它根本不需要接触文件夹。它只将一个文件复制到该文件夹​​。仅当文件夹中至少有一个文件被标记为只读并获取一个 sidecar 文件时,才会出现该错误。

我已经尝试将脚本从系统驱动器移动到桌面并从那里启动它。没有区别。

(为了避免混淆:我使用的是非英语 Windows 10,所以我使用了 !var! 而不是 %var。该死,我花了一些时间才找到那个技巧...)

echo off
setlocal ENABLEDELAYEDEXPANSION
chcp 65001

IF "%~1" == "" (
    GOTO myWarning
) ELSE (
    IF EXIST "%~1" (
        GOTO myFuction
    ) ELSE (
        GOTO myWarning
    )
)

GOTO myFuction
:myWarning
echo Ordner-Pfad muss angegeben werden!
pause
GOTO:eof

:myFuction
echo Bearbeite %1

cd "%1"

for /r %%f in (*.nef) do (
    set fileattr=%%~af
    set readonlyattr=!fileattr:~1,1!
    :: check if current file is read-only
    IF !readonlyattr!==r (
        :: create XMP-Sidecar file for read-only photos
        echo %%f
        robocopy "C:" "%1" "metadata-2stars.xmp"
        rename "metadata-2stars.xmp" "%%~nf.xmp"
    )
)

GOTO:eof

抱歉,在我将问题缩小到 robocopy 之后,我找到了解决方案。这似乎是 robocopy 中的一个已知错误,例如此处描述:

https://blog.coeo.com/how-to-prevent-robocopy-from-hiding-your-files-and-how-to-fix-it-when-it-does

solution/hotfix 只是告诉 robocopy 不要通过在命令末尾添加 /A-:SH 将目的地标记为系统隐藏。因此 robocopy "C:" "%1" "metadata-2stars.xmp" /A-:SH 一切都按预期工作。