Пакетный файл — цикл с использованием xcopy с переменным числом переменных?

#loops #batch-file #xcopy

#циклы #пакетный файл #xcopy

Вопрос:

Я помощник юриста, и мне нужно создавать папки и файлы для каждого поступающего контракта. Папки будут называться только по адресу, а внутри будут 2 пустые папки и 2 подготовленных файла, DOCX и TXT, которые необходимо изменить с указанием адреса в имени. Я сохраняю пример папки с именем просто «@», чтобы она оставалась в верхней части списка папок. Я написал скрипт для копирования переименования вещей по мере необходимости:

 xcopy "@" "$VAR1" /e /i
cd "$VAR1"
rename "Deed - Blank.docx" "Deed - $VAR1.docx"
rename "Deed Prep.txt" "$VAR1 Deed Prep.txt"
cd..
 

Это экономит некоторое время, но до сих пор, когда мне нужно его использовать, я копирую его в окно блокнота, затем использую Control H для замены всех экземпляров «$ VAR1» адресом. Затем я снова копирую базовый скрипт и управляю H с новым адресом. Когда у меня есть все, я открываю командное окно в корневую папку и вставляю команды. Иногда мы получаем 3 новых контракта, иногда 10, но в целом ситуация улучшается, поэтому я знаю, что мне нужно сделать правильный цикл, чтобы сэкономить намного больше времени.

Из поиска я теперь знаю, что нужные мне фрагменты — это set /p и for /l , но.. Я просто не знаю, как собрать кусочки вместе. Мне нужно иметь возможность каким-то образом вводить адреса, поэтому запрашивается ли он по одному или все сразу, или ввод их в основную команду, например script.bat "123 Happy St" "1600 Pennsylvania Ave" "32 John's Wall Dr" , это было бы намного лучше, чем то, как я делаю это сейчас.

Заранее спасибо!

Комментарии:

1. вместо того, чтобы редактировать сценарий с новыми значениями, замените значения переменных ссылками %1 на аргументы и т. %2 Д. И вызовите сценарий из командной строки с соответствующими аргументами.

Ответ №1:

 @echo off
setlocal
:again
set "property=%~1"
if not defined property goto :eof

xcopy "@" "%property%" /e /i
cd "%property%"
rename "Deed - Blank.docx" "Deed - %property%.docx"
rename "Deed Prep.txt" "%property% Deed Prep.txt"
cd..

shift
goto again
 

Первые две строки 1) подавляют echo команды, выполняемые на консоли, и 2) убедитесь, что все изменения в среде сохраняются при завершении пакета. Это гарантирует, что последовательные пакетные файлы не взаимодействуют из-за переменных, установленных в предыдущем пакетном запуске в том же сеансе.

Метка again — это просто точка возврата (двоеточие обязательно)

set команда получает первый аргумент, удаляет его окружающие кавычки и присваивает результат переменной property .

Если дополнительных аргументов нет, property он не будет назначен, поэтому выйдите из пакета (двоеточие обязательно)

Затем в вашей программе используйте значение property внутри команд, окружив переменное имя символом % .

Наконец, shift аргументы — отбросить %1 и перетасовать оставшиеся, так что %2 становится %1 и т.д.

Затем вы можете запустить пакет как script.bat "123 Happy St" "1600 Pennsylvania Ave" "32 John's Wall Dr"

Комментарии:

1. Вау. Это прекрасная вещь. Я знал, что я был близок, но были части, которые мне не хватало.. Большое тебе спасибо, Magoo, за то, что собрал это вместе. Я только что попробовал, и он работает абсолютно безупречно. Спасибо!!