Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Как скопировать системные и скрытые файлы из каталога-источника в заданный путь? (http://forum.oszone.net/showthread.php?t=331483)

ЦезарЪ 27-11-2017 14:56 2780496

Как скопировать системные и скрытые файлы из каталога-источника в заданный путь?
 
Для того чтобы копировать скрытые и системные файлы, использую xcopy /h "%path1%" "%path2%", при использовании команды xcpopy и атрибут /H, копируется все файлы.

Для проверки системных и скрытых файлов, использую команду dir /b /a:h "%path1%\*.* и dir /b /a:s "%path1%\*.*" - выводит файлы имеют такой тип, чтобы увидеть файлы, которые он скопирует из пути1.

Полное задание: Пакетный файл, предназначенный для копирования системных и скрытых файлов из каталога-источника в заданное место назначения. Каталог-источник и место назначения задаются в качестве пакетных параметров. После копирования отчет, содержащий список скопированных файлов с путем, в автоматическом режиме загружается в текстовый процессор "Блокнот".

megaloman 29-11-2017 19:38 2781067

Вот далеко не блестящее решение
Код:

@Echo Off

Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_Out"
Set "LogFile=%~dpnx0.log"

>"%LogFile%" (FOR /F "usebackq tokens=1,2 delims=>" %%i IN (`"xcopy "%BoxIn%\*.*" "%BoxOut%\" /L /F /H /S /K /Y" 2^>nul`) DO If Not "%%j"=="" (Call :CopyAttrib "%%i" "%%j"))
Notepad "%LogFile%"
GoTo :Eof

:CopyAttrib
        Set "InFile=%~1"
        Set "InFile=%InFile:~0,-2%"
        Set "OutDir=%~p2"
        Set "OutDir="%OutDir:~2%""
        Set /A Log=0
        Dir "%InFile%" /b /A:S >nul 2>nul &&Set /A Log=1
        Dir "%InFile%" /b /A:H >nul 2>nul &&Set /A Log=1
        If %Log% EQU 1 (
                Xcopy "%InFile%" %OutDir% /H /K /Y >nul 2>&1
                Echo "%InFile%"
        )
GoTo :Eof

В чём неприятности:
1. Если в исходном пути попадаются папки с атрибутом скрытый/системный, то в копии атрибут скрытый/системный с папок убирается
2. Нормально скрипт работает в кодировке 866. Иначе файлы с русскими буквами в названии не обработаются.
3. Как следствие, в стандартном блокноте файлы с русскими буквами в названии отображаются в зюкочками.
Цитата:

Цитата ЦезарЪ
Для того чтобы копировать скрытые и системные файлы, использую xcopy /h »

/H в xcopy следует понимать не как фильтр, а как разрешение при копировании файлов копировать скрытые/системные файлы тоже.


Время: 17:34.

Время: 17:34.
© OSzone.net 2001-