#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, за то, что собрал это вместе. Я только что попробовал, и он работает абсолютно безупречно. Спасибо!!