为什么我的批处理脚本隐藏已处理 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
一切都按预期工作。
这里的任何人都可以给我提示,为什么我的批处理脚本将成功处理的文件夹标记为系统、隐藏、非存档?此外,我什至无法通过资源管理器删除 "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
一切都按预期工作。