Меню

Xcopy ошибка интерпретации параметров

Issuing:

xcopy X: "Y:...bin9876543210" /c /g /d /i /e /r /h /y

works as expected. However:

xcopy X: "Y:...bin9876543210" /c /g /d /i /e /r /h /y /exclude:"Y:...exclude.txt"

returns error:

Invalid number of parameters

Which also occurs when path names (containing spaces) are not enclosed by quotation marks. This however, is not the case. Paths (edited for readability) all correspond correctly. Syntax (as per Product Documentation — Xcopy) is also correct. Concerning OS is Windows XP Professional x32 SP3.

Why is second cmd returning error and how is it to be solved? I am not looking for alternatives to xcopy (robocopy etc.).

Ross Ridge's user avatar

Ross Ridge

37.7k7 gold badges79 silver badges111 bronze badges

asked Jun 4, 2015 at 18:47

user4157124's user avatar

user4157124user4157124

2,72013 gold badges26 silver badges42 bronze badges

XCOPY is an old command harking back to the days of DOS. It looks like the /EXCLUDE option was never updated to support long file names. Ugh 🙁

If you remove the quotes, then the text after the space is interpreted as an additional parameter, and you get the «Invalid number of parameters» error. If you keep the quotes, then it treats the quotes as part of the path, and reports it cannot find the file.

I believe you have three possible solutions:

1) Use the short 8.3 folder names in your path.

Of course this cannot work if your volume has short names disabled.

2) Use the SUBST command to create a drive alias for your troublesome path.

subst Q: "Y:path with spaces"
xcopy X: "Y:...bin9876543210" /c /g /d /i /e /r /h /y /exclude:Q:exclude.txt
subst Q: /d

This could be a problem if you don’t know a drive letter that is free.

3) (my favorite) Simply PUSHD do the troublesome path and run the command from there 🙂

pushd "Y:path with spaces"
xcopy X: "Y:...bin9876543210" /c /g /d /i /e /r /h /y /exclude:exclude.txt
popd

answered Jun 4, 2015 at 19:52

dbenham's user avatar

/EXCLUDE:file switch will not exclude the file specified. As per xcopy command reference:

/exclude:FileName1[+[FileName2][+[FileName3](…)] Specifies a list of
files. At least one file must be specified.
Each file will contain search strings with each string on a separate line in the file. When any of the strings match any part of the
absolute path of the file to be copied, that file will be excluded
from being copied.

answered Jun 4, 2015 at 19:22

JosefZ's user avatar

JosefZJosefZ

27.2k5 gold badges45 silver badges80 bronze badges

1

It took me some time to get this right as well (I had the same errors), but ultimately, this format worked for me. As with all things DOS, absolute precision is critical, so feel free to copy and paste the below.

xcopy /t /e "C:UsersusernameYour Folder" "C:UsersuserYour Folder"

Fedor's user avatar

Fedor

15k5 gold badges38 silver badges114 bronze badges

answered Jan 6 at 17:54

DAKNYC's user avatar

Я пытаюсь скопировать файлы из E: / bin / Debug / в E: / New с помощью xcopy. Мой синтаксис

xcopy /s "E:binDebug*.*E:New"

На окнах 10.

Он возвращается

ошибка неверный номер параметра

Или иногда

Новый не найден неверный путь

. Пожалуйста, помогите мне найти мою ошибку. Что я делаю неправильно?

1 ответ

Лучший ответ

Вам нужен пробел между аргументами, и каждый параметр должен быть в кавычках *.

E:> xcopy /s /i "E:binDebug*.*" "E:New"
E:binDebugTestInnerDirFileA.txt
E:binDebugTestInnerDirFileB.txt
2 files copied

По умолчанию xcopy не создает целевой каталог, если он не существует. Используйте опцию /i, если вы этого хотите. Документацию xcopy можно найти здесь.

/ i:
Если источник — это каталог или содержит символы подстановки, а пункт назначения не существует, xcopy предполагает, что пункт назначения указывает имя каталога и создает новый каталог. Затем xcopy копирует все указанные файлы в новый каталог. По умолчанию xcopy предлагает указать, является ли пункт назначения файлом или каталогом.

В качестве альтернативы вы можете использовать mkdir для создания ‘E: New ‘

Quotemarks *: требуется только в том случае, если ваши аргументы содержат пробелы, такие как имена каталогов, такие как Program Files, в которых есть пробелы. Но всегда включать их в список — хорошая идея.


4

FalcoGer
8 Апр 2019 в 09:45

Вопрос:

выдавший:

xcopy X: "Y:...bin9876543210" /c /g /d /i /e /r /h /y

работает как ожидалось. Однако:

xcopy X: "Y:...bin9876543210" /c /g /d /i /e /r /h /y /exclude:"Y:...exclude.txt"

возвращает ошибку:

Недопустимое количество параметров

Что также происходит, когда имена путей (содержащие пробелы) не заключены в кавычки. Однако это не так. Пути (отредактированные для удобочитаемости) все правильно соответствуют. Синтаксис (согласно Документация по продукту – Xcopy) также верен. В отношении ОС – Windows XP Professional x32 SP3.

Почему вторая CMD возвращает ошибку и как ее решить? Я не ищу альтернативы xcopy (robocopy и т.д.).

Лучший ответ:

XCOPY – это старая команда, возвращающаяся к дням DOS. Похоже, опция /EXCLUDE никогда не обновлялась для поддержки длинных имен файлов. Ugh: – (

Если вы удаляете кавычки, текст после пробела интерпретируется как дополнительный параметр, и вы получаете ошибку “Недопустимое количество параметров”. Если вы сохраняете кавычки, то он рассматривает кавычки как часть пути и сообщает, что не может найти файл.

Я считаю, что у вас есть три возможных решения:

1) Используйте короткие имена папок 8.3 в вашем пути.

Конечно, это не сработает, если ваш том имеет короткие имена.

2) Используйте команду SUBST, чтобы создать псевдоним диска для вашего трудного пути.

subst Q: "Y:path with spaces"
xcopy X: "Y:...bin9876543210" /c /g /d /i /e /r /h /y /exclude:Q:exclude.txt
subst Q: /d

Это может быть проблемой, если вы не знаете бесплатную букву диска.

3) (мой любимый) Просто PUSHD выполните неприятный путь и выполните команду оттуда: -)

pushd "Y:path with spaces"
xcopy X: "Y:...bin9876543210" /c /g /d /i /e /r /h /y /exclude:exclude.txt
popd

Подробнее см. https://sevenx7x.wordpress.com/2009/01/02/xcopy-with-exclude-option-shows-cant-read-file/ и http://forums.majorgeeks.com/showthread.php?t=54300.

Ответ №1

/EXCLUDE:file не исключает указанный файл. По xcopy ссылка на команду:

/exclude:FileName1[+[FileName2][+[FileName3](…)] Задает список файлы. Необходимо указать хотя бы один файл. Каждый файл будет содержать строки поиска с каждой строкой в ​​отдельной строке в файле. Когда какая-либо из строк соответствует любой части абсолютный путь к файлу, который будет скопирован, этот файл будет исключен от копирования.

при некоторых обстоятельствах xcopy вернет ошибку Invalid number of parameters не давая вам понятия о том, что происходит. Обычное решение для этого-убедиться, что ваши имена файлов заключены в кавычки, так как это может быть проблемой с пакетными файлами, где у вас есть что-то вроде xcopy %1 %2 и xcopy "%1" "%2". Недавно я столкнулся с проблемой, однако, где проблема была не в пробелах:

C:Tempfoo>c:/windows/system32/xcopy.exe /f /r /i /d /y * ..bar
Invalid number of parameters

источник

1 ответов

решение это было сложно: получается, что команда xcopy является разбор слеши в пути к собственному бинарных. Это прекрасно работает:

C:Tempfoo>c:windowssystem32xcopy.exe /f /r /i /d /y * ..bar
C:Tempfooblah -> C:Tempbarblah
1 File(s) copied

вы также можете столкнуться с этим, если у вас есть свой PATH определяется с использованием косой черты вместо обратной.

отвечен Slothman 2010-02-26 00:37:24

источник

Я искал ответ по всему Google, и хотя здесь, в SO, есть несколько тем, в которых обсуждается проблема, ни один из предоставленных ответов, похоже, не работает.

У меня есть следующий цикл для копирования каталогов с одного диска на другой:

for /F "tokens=2 delims==" %%z in ('set dirs[') do (
    xcopy "%%z*.*" "!outdrive!:!dir!%%~nxz" /C /S /D /Y /I
)

«dirs» — это массив, содержащий несколько (неизвестное количество) строк, обозначающих каталоги. Например, одним элементом может быть C:UsersownerDocuments, а другим — C:UsersownerPicturesfoo barTrip. «Outdrive» — это диск, на который xcopy копирует файлы, а «dir» — это просто папка, созданная до этого с помощью md с именем «backup xx-xx-xxxx», где x составляют текущую дату. В любом случае, когда я запускаю программу, я получаю сообщение об ошибке «Недопустимое количество параметров». Я вижу, как это было бы вызвано, если бы у меня не было кавычек вокруг каталогов, поскольку каталог, такой как C:UsersownerPicturesfoo barTrip, имеет пробел в одном из имен папок. Однако, поскольку у меня есть кавычки, окружающие каждый параметр, я не совсем уверен, что вызывает эту проблему. Я надеюсь, что кто-то может пролить свет на это.

Пакетный файл — это Windows .bat ОС — это Windows 8 x64. Отложенное расширение включено, следовательно, «!», хотя я не думаю, что мне даже нужно отложенное расширение для этого цикла.

РЕДАКТИРОВАТЬ
Изменив команду XCOPY на echo и увидев, как именно выглядит строка, я заметил, что «dir» заключен в кавычки, поэтому он обрабатывает его как еще один параметр. Я добавил строку:

set dir=!dir:"=!

и это сработало. Извините за такой глупый вопрос, я не знаю, как я пропустил это раньше.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Xcom enemy within ошибка 0xc0000906
  • Xerox 3220 ошибка прив лазера