Пакетный скрипт для копирования файлов по имени - PullRequest
0 голосов
/ 17 ноября 2018

В основном я хочу написать небольшой пакетный скрипт, который выполняет следующее - у меня есть две папки, A и B ... A имеет 10 файлов и B имеет 100. Я хочу сравнить имена файлов в каждой папке и если имена в B имеют то же имя, что и в A, скопируйте их в папку A и перезапишите исходный файл.

Я пытался начать, выполнив команду «for» в папке A, но затем мне пришлось бы следовать этому методу IF, чтобы сравнить имена файлов, которые я не знаю, как правильно выразить

    for /r "C:\folderA" %%a in (*.filetype) do (...)

Извините, но я бесполезен с пакетными сценариями. Я нашел несколько тем, посвященных схожим вопросам, но Рли не следовал за ответами, чтобы помочь.

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

Спасибо за любую помощь:)

1 Ответ

0 голосов
/ 17 ноября 2018

Попробуйте это:

xcopy /s /u /y /i /r /c "C:\folderB\*.filetype" "C:\folderA"
  • /s копирует папки и подпапки
  • /u копирует только файл, который существует в обеих папках
  • /y подавляет запросы на перезапись файлов
  • /i сообщает xcopy, что местом назначения является папка
  • /r игнорирует атрибут READONLY на всякий случай (это необязательно)
  • /c продолжает копирование, даже если возникают ошибки (это необязательно)

Более подробную информацию о xcopy можно найти здесь (или xcopy /?)

Если это не работает для вас, то что-то вроде этого должно сделать:

for /r "C:\folderA" %%a in (*.filetype) do if exist "C:\folderB\%%~nxa" copy /y "C:\folderB\%%~nxa" "C:\folderA\%%~nxa"

Вот что он делает:

  • if exist проверяет, существует ли файл
    • проверяемый путь состоит из folderA пути, имени и расширения файла, найденного в folderB
  • copy /y копирует файл, перезаписывая существующий
    • из оригинального файла, найденного в folderB
    • к файлу с аналогичным именем, найденному в folderA

%%~dpnxa синтаксис выглядит так:

  • %%SOMETHINGa означает, что это переменная цикла for
  • ~ подавляет двойные кавычки вокруг имен файлов (мы предоставим наши собственные)
  • d для диска (c:)
  • p - для пути к папке (\folderA\)
  • n - для имени файла (т.е. readme)
  • x для расширения (т.е. .txt)

Вы можете смешивать и сочетать их так, как вам нравится. Больше информации здесь или попробуйте for /?

Если логика должна быть более сложной, я предлагаю использовать ( ) скобки + отложенное расширение или call :label (call /?)

ОБНОВЛЕНИЕ: исправлено смешение FolderA и FolderB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...