Как я изменяю использование атрибута файла Powershell?

Почему возникает ошибка

В PHP регулярное выражение должно быть заключено внутри пары разделителей . Разделителем может быть любой небуквенный символ, не обратный слэш, не-пробельный символ; /, #, ~ являются наиболее часто используемыми. Обратите внимание, что также можно использовать ограничители стиля скобок, где открывающие и закрывающие скобки являются начальным и конечным разделителями, то есть , [pattern_goes_here] и т. Д. Все действительны.

« Неизвестная ошибка модификатора X "обычно возникает в следующих двух случаях:

  • Когда в вашем регулярном выражении отсутствуют разделители.
  • Когда вы используете разделитель внутри шаблона, не избегая его.

В этом случае регулярное выражение равно ]*>]*>. Механизм регулярных выражений рассматривает все от < до > как шаблон регулярного выражения, а затем все как модификаторы.

Regex:   ]*>]*>
       │     │  │          │
       └──┬──┘  └────┬─────┘
       pattern    modifiers

] здесь неизвестный модификатор, потому что он появляется после закрытия >. Вот почему PHP выдает эту ошибку.

В зависимости от шаблона, анонимная жалоба-модификатор также могла быть о *, +, p, / или ) или почти любую другую букву / символ. Только imsxeADSUXJu являются действительными модификаторами PCRE .

Как исправить это

Исправить легко. Просто оберните шаблон регулярного выражения любыми действительными разделителями. В этом случае вы можете выбрать ~ и получить следующее:

~]*>]*>~
│                   │
│                   └─ ending delimiter
└───────────────────── starting delimiter

Если вы получаете эту ошибку, несмотря на использование разделителя, возможно, это связано с тем, что сам шаблон содержит несвязанные вхождения указанного разделителя .

Или разделители escape-кода

/foo[^/]+bar/i, несомненно, вызовут ошибку. Таким образом, вы можете избежать этого, используя обратную косую черту, если она появляется в любом месте регулярного выражения:

/foo[^\/]+bar/i
│      │     │
└──────┼─────┴─ actual delimiters
       └─────── escaped slash(/) character

Это утомительная работа, если ваш шаблон регулярного выражения содержит так много вхождений символа разделителя.

Более чистым способом, конечно же, было бы использование другого разделителя. В идеале символ, который нигде не встречается внутри шаблона регулярного выражения, скажем # - #foo[^/]+bar#i.

More reading:

22
задан Matt Hamilton 21 January 2009 в 10:44
поделиться

4 ответа

От здесь :

function Get-FileAttribute{
    param($file,$attribute)
    $val = [System.IO.FileAttributes]$attribute;
    if((gci $file -force).Attributes -band $val -eq $val){$true;} else { $false; }
} 


function Set-FileAttribute{
    param($file,$attribute)
    $file =(gci $file -force);
    $file.Attributes = $file.Attributes -bor ([System.IO.FileAttributes]$attribute).value__;
    if($?){$true;} else {$false;}
} 
11
ответ дан Mitch Wheat 29 November 2019 в 04:06
поделиться

Можно использовать старую добрую DOS attrib команда как это:

attrib -a *.*

Или сделать это использование Powershell можно сделать что-то вроде этого:

$a = get-item myfile.txt
$a.attributes = 'Normal'
26
ответ дан Simon Steele 29 November 2019 в 04:06
поделиться

Как Атрибуты в основном поле битовой маски, необходимо быть уверены ясный поле архива при оставлении остальных в покое:

PS C:\> $f = get-item C:\Archives.pst
PS C:\> $f.Attributes
Archive, NotContentIndexed
PS C:\> $f.Attributes = $f.Attributes -band (-bnot [System.IO.FileAttributes]::Archive)
PS C:\> $f.Attributes
NotContentIndexed
PS H:\>
11
ответ дан Goyuix 29 November 2019 в 04:06
поделиться

Вы можете использовать следующую команду для переключения поведения

$file = (gci e:\temp\test.txt)
$file.attributes
Archive

$file.attributes = $file.Attributes -bxor ([System.IO.FileAttributes]::Archive)
$file.attributes
Normal

$file.attributes = $file.Attributes -bxor ([System.IO.FileAttributes]::Archive)
$file.attributes
Archive
1
ответ дан 29 November 2019 в 04:06
поделиться
Другие вопросы по тегам:

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