1

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

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

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

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

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

2 ответа2

0

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

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

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

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .