Вопрос

У меня есть пакетный файл, который перебирает содержимое текстового файла и копирует определенный файл с помощью команды xcopy.

вот фрагмент.

for /f %%a in (FilesToCopy.txt) do (
xcopy ..\..\Common\%%a Common\%%a /i /d /c /v /s /y /f 
xcopy Common\%%a ..\..\Common\%%a /i /d /C /v /s /y /f 
)

%%a содержит такие значения, как Images\image1.jpg Images\image2.jpg

таким образом, когда выполняется xcopy, это будет выглядеть следующим образом

xcopy ..\..\Common\Images\image1.jpg Common\Images\image1.jpg /i /d /c /v /s /y

после выполнения он выдаст это сообщение

Does Common\Images\image1.png specify a file name
or directory name on the target
(F = file, D = directory)?

похоже, что команда /i не работает, или я чего-то здесь не хватает, чтобы подавить приведенное выше сообщение.

Это было полезно?

Решение

Что ж, вы не учли второй заявление, содержащееся в справке, касается /I:

/I           If destination does not exist and copying more than one file,
             assumes that destination must be a directory.

Вы копируете только один файл за раз, так что /I неприменимо.

Вероятно, вы можете взломать решение этой проблемы с помощью конвейера F ввод команды и подавление вывода:

echo F|xcopy ..\..\Common\%%a Common\%%a /i /d /c /v /s /y /f >nul

(Не будет работать в неанглоязычных версиях Windows;но, вероятно, это наименьшая из ваших проблем, учитывая, что пакет уже завершается с ошибкой для имен файлов с пробелами :-))

Вы могли бы попробовать создать единый длинный список имен файлов для копирования:

setlocal enabledelayedexpansion enableextensions
set LIST=
for /f %%a in (FilesToCopy.txt) do set LIST=!LIST! "..\..\Common\%%a"
xcopy %LIST% Common /i /d /c /v /s /y /f

Однако для этого требуется два прохода по исходному файлу.И это приводит к сбою, когда список имен файлов становится длиннее 8190 символов.

Другие советы

Пунктом назначения должен быть путь, тогда он не будет запрашивать:

xcopy ..\..\Common\Images\image1.jpg Common\Images\ /i /d /c /v /s /y

В вашем случае вы можете использовать извлечение пути с %~ p в пункте назначения, так как вы можете захотеть сохранить это:

xcopy ..\..\Common\%%a Common\%%~pa /i /d /c /v /s /y
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top