Прежде всего, почему вы пишете это как программу на C или что-то в этом роде? Вам не нужно передавать подобные аргументы, использовать $args
и разделять на =
и т. Д., Когда Powershell имеет более мощную концепцию параметров, благодаря которой вы можете передавать именованные параметры и аргументы, а не выполнять анализ, которым вы являетесь делает. (Подробнее о параметрах здесь: http://technet.microsoft.com/en-us/library/dd315296.aspx)
С учетом сказанного, позвольте мне ответить на ваш вопрос:
Что вы делаете, когда передаете такие аргументы, как:
par=a,1,2,0.1 par=b,3,4,0.1 par=c,5,6,0.1 bin=file.exe exeargs="fixed args for file.exe"
вы передаете массив массивов. Первый элемент - это массив с элементами:
par=a
1
2
0.1
Хорошо подходит к расколу:
Когда вы делаете [string] $a
, вы конвертируете массив в строку. По умолчанию это означает, что массив с элементами 1,2,3
станет 1 2 3
.
Таким образом, ваш первый аргумент par=a,1,2,0.1
становится par=a 1 2 0.1
, а разделение на =
означает, что parts[1]
становится a 1 2 0.1
, что вы и видите.
Так как же вы можете оставить запятую?
Просто создайте массив для преобразования в строку с ,
между пробелами, верно?
Вот несколько способов сделать это:
Использование оператора -join
:
foreach ($arg in $args)
{
$parts = ($arg -join ",").split("=")
Write-Host $parts[1]
}
Теперь вы увидите вывод с запятыми, которые вы хотите.
Другой способ, используя $ofs
специальную переменную:
foreach ($arg in $args)
{
$ofs =","
$parts = ([string] $arg).split("=")
Write-Host $parts[1]
}
(подробнее о $ здесь: http://blogs.msdn.com/b/powershell/archive/2006/07/15/what-is-ofs.aspx)
Отказ от ответственности - Все это объяснение, чтобы вы поняли, что происходит. Пожалуйста, не продолжайте это и используйте параметры.