Вопрос очень неясен, но я все же пытаюсь на него ответить.
Я хочу скопировать выбранные файлы из источника в место назначения.
Я предполагаю, что файлы выбраны в Проводнике Windows, и цель состоит в том, чтобы скопировать выбранные файлы с полным путем с диска F:
на диск C:
, но с заменой первого каталога Source
на Destination
.
Это можно сделать с помощью следующего пакетного файла:
@echo off
for %%A in (%*) do for /F "tokens=1* delims=\" %%B in ("%%~pA") do %SystemRoot%\System32\xcopy.exe "%%~A" "C:\Destination\%%C" /C /F /G /H /K /R /Y
pause
Пакетный файл может храниться в любом каталоге. Для запуска его с выбранными файлами в проводнике Windows необходимо создать файл ярлыка (* .lnk) в папке SendTo
вашей учетной записи пользователя.
Папка SendTo
в Windows XP - папка %USERPROFILE%\SendTo
, а в Windows Vista и более поздних версиях Windows - папка %APPDATA%\Microsoft\Windows\SendTo
(что подтверждается Stephan ).
Чтобы создать файл ярлыка, нажмите вторичную (правую) кнопку мыши на командном файле и нажмите в открывшемся контекстном меню в подменю Отправить в пункте меню Рабочий стол (создать ярлык) .
Переключитесь на рабочий стол Windows и нажмите вторичную (правую) кнопку мыши на только что созданном ярлыке и щелкните левой кнопкой мыши в открывшемся контекстном меню последнего элемента Свойства .
Сначала добавьте на Цель Строка %*
(пробел, знак процента, звездочка), которая важна для последующего запуска пакетного файла с полными именами всех выбранных файлов. Проводник Windows передает в качестве аргументов командный файл. Во-вторых, напишите Комментарий комментарий, который поможет вам позже узнать, что делает этот ярлык при его использовании. Вы также можете нажать кнопку Изменить значок и выбрать лучший значок из %SystemRoot%\System32\shell32.dll
, поскольку Windows автоматически выбрал ярлык для командного файла. Затем закройте Свойства с помощью кнопки OK .
Снова щелкните второй (правой) кнопкой мыши на только что созданном и измененном ярлыке и щелкните основной (левой) кнопкой мыши в пункте меню Переименовать . Переименуйте файл ярлыка так, как вам нужно: Копировать выбранные файлы .
Теперь файл ярлыка на рабочем столе Windows готов к перемещению в папку SendTo
. Поэтому выберите файл ярлыка одним щелчком мыши по нему основной (левой) кнопкой мыши, нажмите Ctrl + X , чтобы вырезать его, откройте в проводнике Windows папку SendTo
своей учетной записи и вставьте ярлык. файл с Ctrl + V в эту папку.
Пакетный файл теперь готов к использованию из Windows Explorer. Вы можете выбрать один или несколько файлов (не папок) в F:\Source
, щелкнуть вторичной (правой) кнопкой мыши на одном из выбранных файлов, чтобы открыть контекстное меню, и щелкнуть левой кнопкой мыши в подменю Отправить. в Копировать выбранные файлы или любое другое имя, которое вы дали файлу ярлыка.
Пакетный файл запускает цикл FOR , обрабатывая все имена файлов, переданные в пакетный файл со ссылкой %*
. Каждому имени файла присваивается одно за другим переменная цикла A
.
Путь к текущему файлу без буквы диска F:
обрабатывается второй FOR , которая разбивает строку пути на две подстроки, используя обратную косую черту в качестве разделителя. Первая подстрока - Source
, которая назначается указанной переменной цикла B
, которая больше не используется. Все остальное пути без буквы диска и двоеточия после \Source\
назначается следующей переменной цикла C
в соответствии с ASCII таблицей . Таким образом, переменная цикла C
содержит путь к каталогу текущего файла без F:\Source\
и заканчивается обратной косой чертой, что важно для следующей команды XCOPY .
Примечание: Число после tokens=
определяет количество уровней каталогов, игнорируемых в пути к исходному файлу.
Команда XCOPY используется для копирования файла, полное имя файла которого содержится в переменной цикла A
, в папку C:\Destination
с созданием дерева каталогов в качестве удержания в переменной цикла C
если это необходимо. XCOPY всегда интерпретирует аргумент назначения как каталог, если аргумент назначения заканчивается обратной косой чертой. Вот почему здесь так важно, чтобы переменная цикла C
содержала путь, заканчивающийся обратной косой чертой.
После того, как все файлы скопированы, выполнение пакетной обработки файлов останавливается cmd.exe
из-за команды PAUSE , чтобы вы могли проверить, все ли работает как ожидалось.
Обратите внимание, что пакетный файл нельзя использовать для копирования тысяч файлов за одно выполнение. Длина командной строки ограничена Windows. Поэтому из Windows Explorer невозможно передать в пакетный файл тысячи полных имен файлов.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
call /?
... объясняет %*
.
echo /?
for /?
xcopy /?