Как к: Создавать уникально временный файл и определять деятельность управляют и путь
Это демонстрация как использовать TempFile в архиве .BAT или .CMD. Цель этого примера определить относительный путь настоящего текущего каталога и задать его к перемеююому.
Принципиальные схемы продемонстрировали:
- Производить имена уникально архива
- Создающ архив temp, используя Windows называя convetion, и уничтожая его делано
- Вызывать подпрограммы поддержки в командном файле
- Используя ПЕРЕХОД: EOF для того чтобы закончить выход подпрограмма но не командное файло
- Польза линии передачи команд «ДЛЯ» режима
- Используя перемеююые с «для /F»
- Как получить текущий каталог
- Verbose и тихие режимы для командного файла
Временные файлы неимоверно полезны в командных файлах. При использовании в комбинации с «для» петли, вы можете выполнить некоторое изумительное вещество от линии передачи команд.
В этом примере мы задаем новый архив - имя к TEMPORARY_FILE переменному и после этого ехпортируем настоящий работая путь к тому архиву путем вторить cd перемеююому окружающей среды к ей:
звонок: GETTEMPNAME
отголосок %cd%>%TEMPORARY_FILE%
Как только наш архив temp имеет содержание, для режима смогите быть использовано для того чтобы parse каждая линия и выполнять команду с результатом. Так, мы используем для команды разделить текущий каталог, препятствуем для того чтобы сказать его «C:\WorkingDir» в несколько частей (знаки внимания aka):
ДЛЯ delims= tokens=1* /F «: » %%G ВНУТРИ (%TEMPORARY_FILE%) устанавливают RelativePath=%%H
Literaly мы говорим, что оно ломает компановку на каждом двоеточии (: ), и задать первый знак внимания к переменному %G. Звездочка (*) показывает что каждый знак внимания позже который должен быть задан к новому переменному письму (h, I, j, и etc.). В нашем примере, наше %H будет содержать «\ WorkingDir».
«Для /F» действительно само полезно с более большими архивами содержать множественные линии. В виду того что наш архив содержит только одну линию с 2 знаками внимания, отростчатые стопы там но вы смогли, например, parse все имена архивов в директории (dir *.xyz /b > %TEMPORARY_FILE%), или содержание ключа регистратуры ехпортированное к тому архиву используя (ВОПРОС REG [...] > %TEMPORARY_FILE%). Я использовал оба из этих методов в прошлом для того чтобы сделать некоторые действительно опрятные вещи которые могли в противном случае включить создать таможню executible. Одно преимущество делать его от линии передачи команд что оно держит регистратуру чистой всего отброса выйденного позади Windows в любое время вы бежите exe.
Oh!
Что-то которое часто не подчеркнуто в «для документации /F» что она может parse перемеююые также, как архивы. Это смогло значительно оптимизировать этот пример. Вместо parsing наш архив, мы просто положили бы нашу перемеююый %CD в цитаты и вызвали бы:
ДЛЯ delims= tokens=1* /F «: » %%G В ("%CD%") устанавливают RelativePath=%%H
Мы получим точно такие же результаты и можем отрезать наш размер командного файла в половине! Конечно, после этого мы не имели бы хороший пример использования архива temp и мы? Так, мы сделаем его трудный путь.
Таким образом:
http://www.thecodecave.com/downloads/batch/GetRelativePath.bat
-
@Echo
-
:: *************************************************************************
-
:: Это демонстрация использования TempFile, подпрограмм серии, использующ
-
:: ДЛЯ петли для того чтобы parse параметры, переход: EOF, используя параметры к
-
:: контролируйте Verbose или тихое исполнение режима серии, получая
-
:: местная директория от перемеююых окружающей среды и польза длиной
-
:: комментарии в командном файле.
-
::
-
:: Использование:
-
:: GetRelativePath < - выставки необходимый выход
-
:: GetRelativePath Verbose < - выставки вся работа
-
::
-
:: Этот режим довольно просто. Он получает гарантированное уникально временное
-
:: filename использует его и после этого кладет настоящий путь в тот архив. Оно после этого
-
:: используйте для команды сломать тот путь в части на двоеточии и
-
:: положите второй лометь в перемеююый окружающей среды. Что все смогли быть
-
:: сделано с для петли parsing местная перемеююый, но с другой стороны мы
-
:: не имеем пример использования архива temp и мы?
-
::
-
:: Первоначально автор - неспециалист Брайан
-
::
-
:: Создано - 01/APR/2006
-
:: Доработанное последнее - 01/APR/2006
-
:: Вкладчики: (Положено вашим имени & инициалам на верхнюю часть)
-
:: Неспециалист Брайан - BL - http://www.TheCodeCave.com
-
::
-
::
-
:: История:
-
:: 01/APR/2006 - BL - Создано
-
::
-
:: Лицензия - если это помогает вам, то - больш! Используйте его, дорабатывайте его доля оно.
-
::
-
:: Индемнитет -
-
:: Используйте это командное файло на вашем собственном риске. Я только вызываю встроенное Windows
-
:: команды, но если изменение typo или пакета услуг влияет на, то чего этот режим
-
:: делает, он нет моего недостатка. В действительности, вы должны как раз остановить теперь и
-
:: не побегите этот архив. Для если он причиняет голубой дым быть испущенным от вашего
-
:: карточка сети, если она переустановит ваше домашнее место к HowToKillMyBoss.com, или если
-
:: оно делает вашу сестру замкнуть вулканизационный барабан с ее парнем законоведа и датировка старта
-
:: caver, нет моего недостатка. (Фактически которое последнее одно могло быть
-
:: улучшение, а нет все еще моего недостатка.)
-
::
-
:: Пожертвования - если это командное файло действительно помогает вам вне, то чувствуйте свободным сделать $5
-
:: пожертвование (США) через Paypal к Brian@TheCodeCave.com или как раз посылает благодарить
-
:: Вы через электронную почту к тому адресу и включаете вашу страну происхождения.
-
:: :: *************************************************************************
-
-
:: *************************************************************************
-
: VerboseCheck
-
:: Проверите для Verbose пароля.
-
:: *************************************************************************
-
:: Положите кронштейн вокруг %1 к ловушке для пустых значений и позволить
-
:: сравнение шнура, котор нужно работать
-
если НЕ == [%1] [Verbose] ПЕРЕХОД:, тоTheWorks
-
отголосок дальше
-
:: *************************************************************************
-
-
:: *************************************************************************
-
: TheWarning
-
::
-
:: Нормально тихая перемеююый показывала бы некоторый info о программе
-
:: и также позвольте нескольким путей выкинуть случайный старт, но этому
-
:: пример использует verbose команду сделать ее показать всю работу.
-
::
-
:: *************************************************************************
-
Verbosity максимума отголоска.
-
Удар Ctrl+Break отголоска теперь, котор нужно остановить здесь или как раз
-
@pause
-
-
:: *************************************************************************
-
: TheWorks
-
::
-
:: Препятствуйте потехе начать!
-
::
-
:: *************************************************************************
-
если НЕ @Echo == [%1] [Verbose]
-
Отголосок производя имя Temp
-
-
-
-
если *************************************************************************, то отголоска == [%1] [Verbose]
-
звонок: GETTEMPNAME
-
если *************************************************************************, то отголоска == [%1] [Verbose]
-
Отголосок.
-
Имя Temp отголоска %TEMPORARY_FILE%
-
Отголосок.
-
Текущий каталог отголоска %cd%
-
Отголосок.
-
Вторьте следующим прокладкам процесса обозначение привода и магазины новое значение
-
-
:: Обнажайте письмо привода для путя сервера
-
:: Это включает некоторый причудливый footwork с архивом temp и a для заявления.
-
звонок: GETTEMPNAME
-
если *************************************************************************, то отголоска == [%1] [Verbose]
-
:: Пошлите настоящий путь вне к архиву temp так, что его можно использовать с ДЛЯ заявлениями /F
-
отголосок %cd%>%TEMPORARY_FILE%
-
ДЛЯ delims= tokens=1* /F «: » %%G ВНУТРИ (%TEMPORARY_FILE%) устанавливают RelativePath=%%H
-
-
если *************************************************************************, то отголоска == [%1] [Verbose]
-
Отголосок.
-
Вторьте относительному путю %RelativePath%
-
-
-
:: *************************************************************************
-
: TheEnd
-
::
-
:: Настолько длиной и спасибо для всех рыб!
-
::
-
:: *************************************************************************
-
Отголосок.
-
перерыв
-
ПЕРЕХОД: EOF
-
-
Отголосок.
-
:: *************************************************************************
-
:: Процедуры по поддержки
-
::
-
:: Эти режимы вызваны с ЗВОНОКОМ директивным и ПЕРЕХОД: EOF
-
:: прекращает тот ЗВОНОК но не прекращает весь ход
-
:: командное файло.
-
:: *************************************************************************
-
-
:: *************************************************************************
-
:: Процедура по GETTEMPNAME
-
:: Создайте временный файл - названный гарантировать архив не существует
-
::
-
:: Возвращения: Архив TEMPORARY_FILE=Temporary - имя
-
::
-
:: *************************************************************************
-
: GETTEMPNAME
-
если определенное _NEXTTEMP установленное /a _NEXTTEMP=1
-
: GETTEMPNAMELOOP
-
если определенный TEMP (, то
-
(установите TEMPORARY_FILE=%TEMP%)
-
) еще если определенное TMP (, то
-
(установите TEMPORARY_FILE=%TMP%)
-
) еще (установите TEMPORARY_FILE=%SystemRoot%)
-
установите _NEXTTEMP=_NEXTTEMP /a * 214013 + 2531011
-
установите ^& 0×7FFF ^>^> 16 /a _T1=_NEXTTEMP
-
установите TEMPORARY_FILE=%TEMPORARY_FILE% \ ~SH%_T1%.tmp
-
если существуют «%TEMPORARY_FILE%» ПЕРЕХОД:, тоGETTEMPNAMELOOP
-
установите _T1=
-
ПЕРЕХОД: EOF
-
:: *************************************************************************















