DOS движется с определенным расширением .xml

408
A Box Of Cheese

Я хочу переместить мои файлы .xml из одного каталога (назовем его «из») в другой (мы будем называть его «в»), но с использованием подстановочных знаков перемещает ненужные файлы, такие как .xml_. Как я могу переместить их, точно указав расширение ".xml"?

2
Возможные дубликаты [Переместить файл в папку архива в cmd с использованием подстановочных знаков] (https://superuser.com/q/517486/173513) и [Как команда Windows RENAME интерпретирует подстановочные знаки?] (Https://superuser.com / д / 475874/173513) jww 6 лет назад 0

2 ответа на вопрос

2
AFH

Поскольку ссылка @ Скотта обсуждает, *.xmlсоответствует *.xml_, потому что имя 8.3 заканчивается .XML(используйте, dir /xчтобы показать).

К счастью, команда ForFiles не подпадает под эту эксцентричность, поэтому вы можете использовать:

forfiles /m *.xml /c "cmd /c move @path TargetDir\" 

Заметки:

  • Поскольку moveэто внутренняя команда, cmdдля ее вызова требуется отдельная команда (это не требуется для внешней команды (такой как xcopy), как в forfiles /m *.xml /c "xcopy @path TargetDir\").
  • Существует /sопция, которая будет проходить через подкаталоги, но она не будет проходить через целевой каталог: если вы хотите, чтобы исходное дерево соответствовало цели, вам нужно будет проанализировать исходный путь, чтобы найти правильный целевой каталог, что, вероятно, лучше всего сделать в командном файле:

    forfiles /m *.xml /c "cmd /c call mover.cmd @relpath TargetDir\"

  • Если вам нужно mover.cmd, я оставлю написание сценария для вас.

  • Я не проверял, что происходит, когда в именах файлов или каталогов есть пробелы, но я ожидал осложнений.
Фантастика, работает как брелок в пакетном файле, большое спасибо! A Box Of Cheese 6 лет назад 0
0
User025

Вы должны иметь возможность перемещать только файлы .xml, используя * .xml в качестве имени файла. Это приведет к следующей команде:
move C:\source\folder\*.xml C:\destination\folder\

Спасибо, но опять же проблема в подстановочных знаках (* в данном случае). Мне нужно что-то, что отфильтровывает все, кроме точно ".xml", потому что с этим .xml_ файлы попадают в A Box Of Cheese 6 лет назад 0
Что странно, я сделал папку источника и назначения. В папке source у меня был файл test.xml и файл test.xml_, а команда, которую я отправил, только переместила .xml и оставила только .xml_. Однако https://superuser.com/questions/825615/windows-wildcards-with-files-having-more-than-3-characters-extensions, упомянутые Скоттом, могут применяться в вашем случае. Мой тест был сделан в Windows 10. User025 6 лет назад 0
Я вижу, я использую Windows 7, так что это может быть причиной проблемы, может ли findstr быть здесь полезен в скрипте, который находит только имена файлов, заканчивающиеся точно на .xml и перемещающие их? A Box Of Cheese 6 лет назад 0
Я не уверен, как вы могли бы добиться этого с помощью findstr, однако есть командлет Powershell «Move-Item», так что если Powershell - это вариант, который может работать. Командой будет `Move-Item -Path C: \ source \ folder \\ *. Xml -Destination C: \ destination \ folder \\` User025 6 лет назад 0

Похожие вопросы