Копировать файлы в каталог, когда я не знаю полный путь

Копировать файлы в каталог, когда я не знаю полный путь

У меня есть приложение, которое при открытии генерирует каталог с некоторыми файлами. Я хотел бы получить доступ к некоторым файлам в этом каталоге, чтобы экспортировать их, а также импортировать в этот каталог. Структура каталога выглядит следующим образом:

+ Folder I know
   + Auto Generated Folder         'Name changes every time
      -SomeFile
      -SomeFile2
      +macro
         -macro1
         -macro2
         -macro3

Я хочу работать только с файлами в подкаталоге 'macro'. У меня есть работающее решение для экспорта с использованием команды 'for', которая смотрит на 'Folder I know' и делает совпадение:

 for /R "C:\Folder I know\" %f in ("macro*") do @xcopy "%f" "destination path" /u /y

Параметр /u в команде xcopy даже позволяет мне обновлять только те файлы, которые уже существуют в месте назначения. Теперь вопрос в том, как сделать то же самое, но наоборот? Я хочу скопировать файлы из папки (например, c:\temp) и обновить их в папке макроса, только если они там уже есть.

решение1

Я не совсем уверен, что понимаю, что именно вы пытаетесь сделать, но, похоже, %CD%переменная окружения может быть полезна. Эта переменная отслеживает текущий рабочий каталог, включая букву диска и полный путь. Вот скриншот ее в действии.

введите описание изображения здесь

Зная эту переменную, вы можете использовать ее в скриптах в той степени, в которой вы сочтете ее полезной. В вашем конкретном случае, похоже, вам придется копировать ваш скрипт в папку макросов каждый раз, когда он генерируется, и запускать его оттуда.

Единственный способ, которым вы, возможно, могли бы написать скрипт, который будет работать извне, — это если вы можете получить любую переменную, которую создает программа для автоматического создания имени одной папки. В качестве альтернативы, если автоматически сгенерированное имя папки следует какому-то соглашению, которое вы можете сопоставить с шаблоном, вероятно, есть некоторые варианты, включающие операторы IF, RegExes и строковые команды, которые могли бы вам подойти.

решение2

После некоторых раздумий и испытаний я нашел решение.

FOR /R "C:\Folder I know\" %f IN ("*") DO @xcopy "network path\%~nf" "%~pf" /e /u /y

Команда for по-прежнему просматривает только каждый файл в папке, которую я знаю, включая подкаталоги, которые я не знаю. Затем она выполняет xcopy, используя сетевой путь, по которому файлы резервируются. Добавленный %~nfв конец получает имя текущего файла из команды for. Затем он копирует его в локальную папку, используя , %~pfкоторый получает путь к текущему файлу из команды for.

Связанный контент