Как скопировать структуру каталогов, но только включать определенные файлы (использующий пакетные файлы окон)

Как объясняется в проблеме Github , которую вы связали, NPY_OWNDATA безопасно использовать только с памятью, выделенной через тот же распределитель, который использует сама NumPy. К этому распределителю можно получить доступ через функции PyDataMem_* . Если ваша память не исходит от этого распределителя, вы не можете использовать NPY_OWNDATA.

Не пытайтесь заставить массив принять владение произвольной памятью, которую вы ему даете. Вместо этого установите base массива для объекта, который знает, как выполнить правильную очистку, используя PyArray_SetBaseObject . Капсула может быть удобным объектом для использования.

94
задан Yvette Colomb 3 February 2019 в 13:10
поделиться

5 ответов

Вы не упоминаете, должен ли это быть пакет только, но если можно использовать ROBOCOPY, попробуйте это:

ROBOCOPY C:\Source C:\Destination data.zip info.txt /E

РЕДАКТИРОВАНИЕ: Измененный /S параметр к /E для включения пустых папок.

157
ответ дан aphoria 24 November 2019 в 06:02
поделиться
XCOPY /S folder1\data.zip copy_of_folder1  
XCOPY /S folder1\info.txt copy_of_folder1

РЕДАКТИРОВАНИЕ: , Если Вы хотите сохранить пустые папки (которому при перечитывании Вашего сообщения Вы кажетесь) используют/E вместо/S.

1
ответ дан gkrogers 24 November 2019 в 06:02
поделиться

Подобный решению Paulius, но файлам Вы не заботитесь о, не копируются тогда удаленные:

@echo OFF

:: Replace c:\temp with the directory where folder1 resides.
cd c:\temp

:: You can make this more generic by passing in args for the source and destination folders.
for /f "usebackq" %%I in (`dir /b /s /a:-d folder1`) do @echo %%~nxI | find /V "data.zip" | find /v "info.txt" >> exclude_list.txt
xcopy folder1 copy_of_folder1 /EXCLUDE:exclude_list.txt /E /I
4
ответ дан Patrick Cuff 24 November 2019 в 06:02
поделиться

Это - только две простых команды, но я не рекомендовал бы это, если файлы, которые Вы не должны копировать, не являются маленькими. Поэтому это скопирует ВСЕ файлы и затем удалит файлы, которые не нужны в копии.

xcopy /E /I folder1 copy_of_folder1
for /F "tokens=1 delims=" %i in ('dir /B /S /A:-D copy_of_files ^| find /V "info.txt" ^| find /V "data.zip"') do del /Q "%i"

Несомненно, вторая команда довольно долга, но она работает!

кроме того, этот подход не требует, чтобы Вы загрузили и установили любые сторонние инструменты (Windows 2000 +, ПАКЕТ имеет достаточно команд для этого).

3
ответ дан Paulius 24 November 2019 в 06:02
поделиться

Альтернативное решение, которое копирует один файл за раз и не требует ROBOCOPY:

@echo off
setlocal enabledelayedexpansion

set "SOURCE_DIR=C:\Source"
set "DEST_DIR=C:\Destination"
set FILENAMES_TO_COPY=data.zip info.txt

for /R "%SOURCE_DIR%" %%F IN (%FILENAMES_TO_COPY%) do (
    if exist "%%F" (
        set FILE_DIR=%%~dpF
        set FILE_INTERMEDIATE_DIR=!FILE_DIR:%SOURCE_DIR%=!
        xcopy /E /I /Y "%%F" "%DEST_DIR%!FILE_INTERMEDIATE_DIR!"
    )
)

Внешний оператор for генерирует любую возможную комбинацию путей подкаталога в SOURCE_DIR и имени в FILENAMES_TO_COPY . Для каждого существующего файла вызывается xcopy. FILE_INTERMEDIATE_DIR содержит путь к подкаталогу файла в SOURCE_DIR , который необходимо создать в DEST_DIR .

29
ответ дан 24 November 2019 в 06:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: