Как я могу найти исходный путь выполняющегося сценария? [дубликат]

Вы можете:

  • иметь vector<unique_ptr<T>> или vector<optional<T>> или vector<some_other_defer_storage_mechanism<T>> вместо просто vector<T> - это все типы упаковщиков, которые добавляют некоторую функциональность T, не затрагивая [ 115] (unique_ptr<T> делает его подвижным, optional<T> обеспечивает построение по умолчанию, поэтому вы можете построить с правильным размером, затем emplace() в пределах optional и т. Д.)
  • Использовать deque<T>, который не требует подвижности для emplace_back (хотя вы теряете смежность)
  • Напишите свой собственный динамический массив, который примерно эквивалентен pair<unique_ptr<T[]>, size_t>, который просто выделяет пространство для n T с, а затем размещает новости на каждый из них, гарантируя, что разрушение делает правильные вещи. Это не так уж плохо для реализации - так как вы не будете изменять размер, вам нужно поддерживать минимальное количество общих операций.

Какой из этих ответов самый лучший, действительно зависит.

61
задан Kiquenet 15 January 2014 в 11:10
поделиться

4 ответа

Мы использовали код, подобный этому, в большинстве наших сценариев в течение нескольких лет без проблем:

#--------------------------------------------------------------------
# Dot source support scripts
#--------------------------------------------------------------------
$ScriptPath = $MyInvocation.MyCommand.Path
$ScriptDir  = Split-Path -Parent $ScriptPath
. $ScriptDir\BuildVars.ps1
. $ScriptDir\LibraryBuildUtils.ps1
. $ScriptDir\BuildReportUtils.ps1
11
ответ дан 24 November 2019 в 17:09
поделиться

Недавно я столкнулся с той же проблемой. Следующая статья помогла мне решить проблему: http://blogs.msdn.com/powershell/archive/2007/06/19/get-scriptdirectory.aspx

Если вас не интересует, как это работает Вот весь код, который вам нужен для этой статьи:

function Get-ScriptDirectory
{
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
Split-Path $Invocation.MyCommand.Path
}

И затем вы получите путь, просто выполнив:

$path = Get-ScriptDirectory
6
ответ дан 24 November 2019 в 17:09
поделиться

Я думаю, вы можете найти путь к вашему запущенному сценарию, используя

$MyInvocation.MyCommand.Path

Надеюсь, это поможет!

Седрик

5
ответ дан 24 November 2019 в 17:09
поделиться

Это одна из тех странностей (по крайней мере, на мой взгляд) в PS. Я уверен, что для этого есть вполне веская причина, но мне все равно это кажется странным. Итак:

Если вы находитесь в скрипте, но не в функции, то $ myInvocation.InvocationName даст вам полный путь, включая имя скрипта. Если вы находитесь в скрипте и находитесь внутри функции, то $ myInvocation.ScriptName даст вам то же самое.

1
ответ дан 24 November 2019 в 17:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: