заменить исключение в powershell - PullRequest
0 голосов
/ 29 января 2012

Я новичок в PowerShell и хорошо знаю C #. У меня есть команда http://www.f2ko.de/programs.php?lang=en&pid=cmd, которая загружает вещи. Я пишу этот скрипт для загрузки всех игр sgf go с этого URL http://www.gogameworld.com/gophp/pg_samplegames.php, и пытался написать скрипт powershell, чтобы сделать это для меня. Поэтому я написал скрипт:

    Get-Content test.txt|
    ForEach-Object
    {
        if($_ -eq "=`"javascript:viewdemogame(`'*.sgf`')`" tit")
        {
            $filename = $_ -replace '=`"javascript:viewdemogame(`''
            $filename = $filename -replace '`')`" tit'
            &"(Path)/download.exe"         ("http://www.gogameworld.com/webclient/qipu/" + $filename)
        }
    }

Однако, когда я запускаю скрипт, я получаю эту ошибку:

    Unexpected token '`'' in expression or statement.
    At (PATH)\test.ps1:7 char:37
    +       $filename = $filename -replace '`' <<<< )'
        + CategoryInfo          : ParserError: (`':String) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : UnexpectedToken

Я много раз смотрел сценарий и до сих пор не могу понять, в чем дело. Спасибо.

Ответы [ 2 ]

2 голосов
/ 29 января 2012

Попробуйте, прочитайте содержимое файла как одну строку, а затем используйте Regex.Matches, чтобы получить все вхождения текста, содержащегося в скобках:

$content = Get-Content test.txt | Out-String
$baseUrl = 'http://www.gogameworld.com/webclient/qipu/'

[regex]::matches($content,"javascript:viewdemogame\('([^\']+)'\)") | Foreach-Object{
    $url = '{0}{1}' -f $baseUrl,$_.Groups[1].Value
     & "(Path)/download.exe" $url 
}

Вот объяснение шаблона регулярного выражения (созданного с помощью RegexBuddy):

javascript:viewdemogame\('([^\']+)'\)

Match the characters “javascript:viewdemogame” literally «javascript:viewdemogame»
Match the character “(” literally «\(»
Match the character “'” literally «'»
Match the regular expression below and capture its match into backreference number 1 «([^\']+)»
   Match any character that is NOT a ' character «[^\']+»
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Match the character “'” literally «'»
Match the character “)” literally «\)»
Match the character “"” literally «"»

'{0} {1}' используется с оператором -f для создания строки. {0} отображается на первое значение в правой части оператора (например, $ baseUrl), а {1} отображается на второе значение. Под капотом PowerShell подает в суд на метод .NET String.Format. Подробнее об этом можно прочитать здесь: http://devcentral.f5.com/weblogs/Joe/archive/2008/12/19/powershell-abcs---f-is-for-format-operator.aspx

1 голос
/ 29 января 2012

'') "tit' Оператор -replace принимает 2 аргумента, разделенных запятой. Первое - это регулярное выражение, совпадающее с тем, что вы хотите заменить. Второе - это строка, с которой вы хотите связать это.пропущен второй аргумент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...