Почему мой пакетный скрипт скрывает обработанные файлы / папки? - PullRequest
1 голос
/ 29 февраля 2020

Может ли кто-нибудь подсказать, почему мой пакетный скрипт помечает успешно обработанные папки как системные, скрытые, неархивированные? Более того, я даже не могу удалить атрибут «скрытый» через проводник (возможно, из-за атрибута systemfolder).

Сценарий предназначен для обработки одной папки (переданной ей в качестве параметра), поиска файлов необработанных фотографий (в моем случае файлы .nef), помеченные только для чтения. Для каждой фотографии, доступной только для чтения, сценарий копирует указанный файл в обработанную папку и переименовывает эту копию в соответствии с именем файла фотографии.

Беспорядок атрибута папки вызван робокопией. (Без этой команды нет проблем.) Но она вообще не должна касаться папки. В эту папку копируется только один файл. Ошибка возникает только в том случае, если хотя бы один файл в папке был помечен только для чтения и получает дополнительный файл.

Я уже пытался переместить сценарий с системного диска на рабочий стол и запустить его оттуда. Это не имело никакого значения.

(Чтобы избежать путаницы: я нахожусь на не-Engli sh 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

1 Ответ

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

Извините, после того как я сузил проблему до робокопии, я нашел решение. Кажется, это известная ошибка в Robocopy, например, описанная здесь:

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

Решение / исправление состоит в том, чтобы просто сказать Robocopy не отмечать пункт назначения как система скрыта путем добавления /A-:SH в конце команды. Так что с robocopy "C:" "%1" "metadata-2stars.xmp" /A-:SH все работает как положено.

...