Подземелье Кода

6-ое апреля 2006

Как к: Создавать уникально временный файл и определять деятельность управляют и путь

Сохранено вниз: Серия - 11:05 am Брайан @

Это демонстрация как использовать 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

DOS:
  1. @Echo
  2. :: *************************************************************************
  3. :: Это демонстрация использования TempFile, подпрограмм серии, использующ
  4. :: ДЛЯ петли для того чтобы parse параметры, переход: EOF, используя параметры к
  5. :: контролируйте Verbose или тихое исполнение режима серии, получая
  6. :: местная директория от перемеююых окружающей среды и польза длиной
  7. :: комментарии в командном файле.
  8. ::
  9. :: Использование:
  10. ::   GetRelativePath          < - выставки необходимый выход
  11. ::   GetRelativePath Verbose < - выставки вся работа
  12. ::
  13. :: Этот режим довольно просто.  Он получает гарантированное уникально временное
  14. :: filename использует его и после этого кладет настоящий путь в тот архив. Оно после этого
  15. :: используйте для команды сломать тот путь в части на двоеточии и
  16. :: положите второй лометь в перемеююый окружающей среды.  Что все смогли быть
  17. :: сделано с для петли parsing местная перемеююый, но с другой стороны мы
  18. :: не имеем пример использования архива temp и мы?
  19. ::
  20. :: Первоначально автор - неспециалист Брайан
  21. ::
  22. :: Создано       - 01/APR/2006
  23. :: Доработанное последнее - 01/APR/2006
  24. :: Вкладчики: (Положено вашим имени & инициалам на верхнюю часть)
  25. ::   Неспециалист Брайан - BL - http://www.TheCodeCave.com
  26. ::
  27. ::
  28. :: История:
  29. ::   01/APR/2006 - BL - Создано
  30. ::
  31. :: Лицензия - если это помогает вам, то - больш! Используйте его, дорабатывайте его доля оно.
  32. ::
  33. :: Индемнитет -
  34. ::    Используйте это командное файло на вашем собственном риске.  Я только вызываю встроенное Windows
  35. ::    команды, но если изменение typo или пакета услуг влияет на, то чего этот режим
  36. ::    делает, он нет моего недостатка.  В действительности, вы должны как раз остановить теперь и
  37. ::    не побегите этот архив.  Для если он причиняет голубой дым быть испущенным от вашего
  38. ::    карточка сети, если она переустановит ваше домашнее место к HowToKillMyBoss.com, или если
  39. ::    оно делает вашу сестру замкнуть вулканизационный барабан с ее парнем законоведа и датировка старта
  40. ::    caver, нет моего недостатка.  (Фактически которое последнее одно могло быть
  41. ::    улучшение, а нет все еще моего недостатка.)
  42. ::
  43. :: Пожертвования - если это командное файло действительно помогает вам вне, то чувствуйте свободным сделать $5
  44. ::    пожертвование (США) через Paypal к Brian@TheCodeCave.com или как раз посылает благодарить
  45. ::    Вы через электронную почту к тому адресу и включаете вашу страну происхождения.
  46. :: :: *************************************************************************
  47.  
  48. :: *************************************************************************
  49. : VerboseCheck
  50. ::  Проверите для Verbose пароля.
  51. :: *************************************************************************
  52. :: Положите кронштейн вокруг %1 к ловушке для пустых значений и позволить
  53. :: сравнение шнура, котор нужно работать
  54. если НЕ == [%1] [Verbose] ПЕРЕХОД:, тоTheWorks
  55. отголосок дальше
  56. :: *************************************************************************
  57.  
  58. :: *************************************************************************
  59. : TheWarning
  60. ::
  61. ::  Нормально тихая перемеююый показывала бы некоторый info о программе
  62. ::  и также позвольте нескольким путей выкинуть случайный старт, но этому
  63. ::  пример использует verbose команду сделать ее показать всю работу.
  64. ::
  65. :: *************************************************************************
  66. Verbosity максимума отголоска.
  67. Удар Ctrl+Break отголоска теперь, котор нужно остановить здесь или как раз
  68. @pause
  69.  
  70. :: *************************************************************************
  71. : TheWorks
  72. ::
  73. ::  Препятствуйте потехе начать!
  74. ::
  75. :: *************************************************************************
  76. если НЕ @Echo == [%1] [Verbose]
  77. Отголосок производя имя Temp
  78.  
  79.  
  80.  
  81. если *************************************************************************, то отголоска == [%1] [Verbose]
  82. звонок: GETTEMPNAME
  83. если *************************************************************************, то отголоска == [%1] [Verbose]
  84. Отголосок.
  85. Имя Temp отголоска %TEMPORARY_FILE%
  86. Отголосок.
  87. Текущий каталог отголоска %cd%
  88. Отголосок.
  89. Вторьте следующим прокладкам процесса обозначение привода и магазины новое значение
  90.  
  91. :: Обнажайте письмо привода для путя сервера
  92. :: Это включает некоторый причудливый footwork с архивом temp и a для заявления.
  93. звонок: GETTEMPNAME
  94. если *************************************************************************, то отголоска == [%1] [Verbose]
  95. :: Пошлите настоящий путь вне к архиву temp так, что его можно использовать с ДЛЯ заявлениями /F
  96. отголосок %cd%>%TEMPORARY_FILE%
  97. ДЛЯ delims= tokens=1* /F «: » %%G ВНУТРИ (%TEMPORARY_FILE%) устанавливают RelativePath=%%H
  98.  
  99. если *************************************************************************, то отголоска == [%1] [Verbose]
  100. Отголосок.
  101. Вторьте относительному путю %RelativePath%
  102.  
  103.  
  104. :: *************************************************************************
  105. : TheEnd
  106. ::
  107. ::  Настолько длиной и спасибо для всех рыб!
  108. ::
  109. :: *************************************************************************
  110. Отголосок.
  111. перерыв
  112. ПЕРЕХОД: EOF
  113.  
  114. Отголосок.
  115. :: *************************************************************************
  116. ::  Процедуры по поддержки
  117. ::
  118. ::  Эти режимы вызваны с ЗВОНОКОМ директивным и ПЕРЕХОД: EOF
  119. ::  прекращает тот ЗВОНОК но не прекращает весь ход
  120. ::  командное файло.
  121. :: *************************************************************************
  122.  
  123. :: *************************************************************************
  124. ::  Процедура по GETTEMPNAME
  125. ::  Создайте временный файл - названный гарантировать архив не существует
  126. ::
  127. ::  Возвращения:      Архив TEMPORARY_FILE=Temporary - имя
  128. ::
  129. :: *************************************************************************
  130. : GETTEMPNAME
  131.       если определенное _NEXTTEMP установленное /a _NEXTTEMP=1
  132.       : GETTEMPNAMELOOP
  133.          если определенный TEMP (, то
  134.             (установите TEMPORARY_FILE=%TEMP%)
  135.          ) еще если определенное TMP (, то
  136.             (установите TEMPORARY_FILE=%TMP%)
  137.          ) еще (установите TEMPORARY_FILE=%SystemRoot%)
  138.          установите _NEXTTEMP=_NEXTTEMP /a * 214013 + 2531011
  139.          установите ^& 0×7FFF ^>^> 16 /a _T1=_NEXTTEMP
  140.          установите TEMPORARY_FILE=%TEMPORARY_FILE% \ ~SH%_T1%.tmp
  141.          если существуют «%TEMPORARY_FILE%» ПЕРЕХОД:, тоGETTEMPNAMELOOP
  142.       установите _T1=
  143. ПЕРЕХОД: EOF
  144. :: *************************************************************************

Никакие комментарии »

Никакие комментарии пока.

Питание RSS для комментариев на этом столбе. URL TrackBack

Выйдите комментарий

Приведено в действие WordPress