Как я могу скопировать конкретный файл из исходного каталога в целевой каталог при воссоздании структуры папок

Мне нужно использовать только партию. Папка назначения должна содержать скопированный файл вместе со структурой каталогов исходного каталога (только для скопированного файла). Пример :

Источник: C: \ folder1 \ folder2 \ folder3 \ text1.txt Место назначения: C: \ backup

После выполнения команды папка назначения должна выглядеть так: C: \ backup \ folder1 \ folder2 \ folder3 \ text1.txt.

Я должен использовать команду только из C: \ (корневой каталог). В моем источнике есть несколько файлов с именем = "text1.text", но с другой структурой папок. Я хочу, чтобы копировался только тот «text1.txt», путь к которому я указываю (источник), а не все файлы с именем «text1.txt» [это может быть достигнуто с помощью --- xcopy Source \ text1.txt * Destination / S /Y]. Пожалуйста, помогите.


person user2074474    schedule 18.04.2013    source источник
comment
Как / где указаны пути для обработки (или исключенные пути)? Вы можете создать пакет, который посещает все подкаталоги и выполняет команду копирования для каждого неисключенного подкаталога. Например, я создал такие пакеты, чтобы скопировать ветку дерева, пропуская все каталоги, содержащие специальный excludeme! marker в процессе, используя только dir, copy, if и for.   -  person TheBlastOne    schedule 18.04.2013
comment
Это можно заархивировать с помощью dir / S / B, перехватить ввод и перебрать полученные имена с помощью for. Там для каждого каталога выполните пакет или команду, которая выполняет «если файл-маркер НЕ присутствует, скопируйте все файлы (но не подкаталоги) этого каталога в цель». Самая большая проблема здесь - это зло для синтаксиса, банков в именах каталогов и файлов и длинных имен файлов, все из которых можно решить с помощью двойных кавычек и других уловок из справки командной строки for, dir, if и copy .   -  person TheBlastOne    schedule 18.04.2013
comment
Мне нужен пакет, который принимает ввод как: C: \ folder1 \ folder2 \ folder3 \ text1.txt (параметр 1) C: \ backup (параметр 2) ... У меня нет специальных маркеров, не копирующих меня.   -  person user2074474    schedule 18.04.2013
comment
есть ли какая-нибудь команда xcopy, которая может это сделать?   -  person user2074474    schedule 18.04.2013
comment
Вы хотите BATCH или хотите XCOPY команду? Вы сказали и то, и другое в своих последних двух комментариях.   -  person Magoo    schedule 18.04.2013
comment
если Xcopy может добиться этого, я могу использовать его. В противном случае пакет.   -  person user2074474    schedule 18.04.2013
comment
папка должна выглядеть так: C: \ backup \ folder1 \ folder2] folder3 \ text1.txt, вы имеете в виду, с этой скобкой внутри?   -  person Endoro    schedule 18.04.2013
comment
Извини за [. Должно получиться так --- C: \ backup \ folder1 \ folder2 \ folder3 \ text1.txt   -  person user2074474    schedule 18.04.2013
comment
Все, что я спрашиваю, это то, есть ли способ сохранить структуру папок от источника до места назначения при копировании определенного файла?   -  person user2074474    schedule 18.04.2013
comment
@ user2074474 да, используя xcopy, как вы заявили, но тогда вы не сможете указать исключения.   -  person TheBlastOne    schedule 18.04.2013


Ответы (1)


@ECHO OFF
SETLOCAL
:: This command alone will accomplish the task using ONLY XCOPY
:: BUT I'm changing the directorynames to suit my system
::
XCOPY c:\sourcedir\a\b\text1.txt u:\backup\sourcedir\a\b\
::
:: Or leave the last XCOPY out and this batch will do the same
:: if you supply the parameter "c:\sourcedir\a\b\text1.txt"
::
:: IE. at the prompt, enter
::
:: thisbatchname "c:\sourcedir\a\b\text1.txt"
::
:: (where the quotes are optional UNLESS the parameter contains 
::  a special character or a space"
::
XCOPY "%~1" "u:\backup2%~p1"

Первый XCOPY должен быть очевиден.

Второй работает с использованием %~1, который является первым параметром, за вычетом заключающих кавычек (если они есть) - это затем перекотируется, чтобы гарантировать, что созданная строка символов анализируется как отдельная строка.

Второй параметр для строк XCOPY U:\BACKUP2 вместе с %~p1 - это p - ПУТЬ параметра 1, а затем заключить все в кавычки.

Следовательно, команда, выполняемая с "c:\sourcedir\a\b\text1.txt" в качестве параметра, будет

xcopy "c:\sourcedir\a\b\text1.txt" "u:backup2\sourcedir\a\b\"

который при необходимости создает целевое дерево.

person Magoo    schedule 18.04.2013
comment
очень уместно, вы должны поместить некоторый текст справки в свою большую партию. :) - person Endoro; 18.04.2013
comment
Ух ты. Поэтому нам потребовалось столько комментариев, чтобы понять, что для указания конкретного целевого местоположения вы указываете это местоположение в качестве целевого местоположения. Вздох. - person TheBlastOne; 18.04.2013
comment
Я считаю, что удаление x из каждой записи xcopy ничего не изменит. :) - person Andriy M; 19.04.2013
comment
@Andriy M Но будет. XCOPY сгенерирует путь. КОПИРОВАТЬ не будет - person Magoo; 19.04.2013