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

Трябва да използвам само партида. Целевата папка трябва да съдържа копирания файл заедно със структурата на директорията на изходната директория (само за копирания файл). Пример:

Източник: 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
Как/къде са посочени пътищата за обработка (или изключените пътища)? Можете да създадете пакет, който посещава всички поддиректории и изпълнява команда за копиране за всяка неизключена поддиректория. Напр., създадох пакети като този, за да копирам клон на дърво, като пропускам всички директории, които съдържат специално изключване! маркер файл в процеса, като се използва единствено 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) ... Нямам специални маркери donot me copy.   -  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 - PATH на параметър 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