1

PowerShell を使用して構成ファイルの設定を変更しようとしています。たとえば、ある値が true の場合、それを false に切り替えたいとします。false の場合は、true に切り替えたいと思います。\\servername\folder\また、パスを からに変更したいと思い\\servername\ます。中間値を使用せずに PowerShell でこれを実行する方法はありますか?

私がこれを行う場合:

$foo = 'aaa'

$foo -replace 'aaa', 'bbb' -replace 'bbb', 'aaa'

$foo常になります'aaa'。断続的な変更 ('aaa'になり'ccc'、次に に変更'bbb') を行うことができることはわかっていますが、それを読むのは面倒です。

中間値を使用せずに値を変更するにはどうすればよいですか?

4

3 に答える 3

1

あなたが何を達成しようとしているのかよくわかりません。バッファ変数なしで 2 つの値を切り替えたいですか? それとも、2 つの状態の間で値を切り替えたいですか? 後者は次のように実現できます。

function Toggle($s, $v1, $v2) {
  $e1 = [regex]::Escape($v1)
  $e2 = [regex]::Escape($v2)

  $r = $s
  if ($s -match $e1) {
    $r = $s -replace $e1, $v2
  } elseif ($s -match $e2) {
    $r = $s -replace $e2, $v1
  }

  return ($r)
}

$foo = "..."

Toggle $foo "\\servername\folder\" "\\servername\"
于 2013-04-03T19:55:47.710 に答える
1

一致評価器の使用。これがより良いかどうかはわかりません。

Begin{
[regex]$ValueRegex = 'aaa|bbb'

$ValueToggles = @{
                  aaa='bbb'
                  bbb='aaa'
                 }

$toggleValue = {$ValueToggles[$args[0].groups[0].value]}
}

Process{

$foo = 'Value: aaa'

$ValueRegex.replace($foo,$toggleValue)

}

Value: bbb
于 2013-04-03T19:34:28.103 に答える
0

-not演算子を使用するだけで、ブール値 ($true または $false) を切り替えることができます。例えば:

PS C:\> $value = $true
PS C:\> $value = -not $value
PS C:\> $value
False

正規表現の置換:

PS C:\> '\\servername\folder\' -replace '^(\\\\[^\\]+)\\[^\\]+', '$1'
\\servername\

明細書

于 2013-04-03T19:05:03.980 に答える